Ik kom er dit keer echt niet uit, (ook na het controleren van de schakeling en het programma), er moet een 1 op het scherm verschijnen als een knop is ingedrukt, en een 0 als dat niet zo is.
De waardes op het schermpje wisselen heel snel tussen 0 en 1 ipv gewoon de staat van de knoppen aan te geven. Wat doe ik fout?


Device 16F628                ;Gebruik een 16F628 type
Config WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF, hs_OSC 
ALL_DIGITAL TRUE              ;Alle ingangen digitaal
XTAL 10                       ;Kristal van 20MHz
Dim b1 As Bit;
Dim b2 As Bit;
Dim b3 As Bit;
Declare LCD_TYPE ALPHA
Declare LCD_INTERFACE 4
Declare LCD_LINES 4
b1 = 0
b2 = 0
b3 = 0
DelayMS 500
Cls
While 1 = 1
If PORTB.0 = 1 Then
If b1 = 0 Then
Print At 1,1, "1"
b1 = 1
EndIf
Else
If b1 = 1 Then
Print At 1,1, "0"
b1 = 0
EndIf
EndIf
If PORTB.1 = 1 Then
If b2 = 0 Then
Print At 1,3, "1"
b2 = 1
EndIf
Else
If b2 = 1 Then
Print At 1,3, "0"
b2 = 0
EndIf
EndIf
If PORTA.3 = 1 Then
If b3 = 0 Then
Print At 1,5, "1"
b3 = 1
EndIf
Else
If b3 = 1 Then
Print At 1,5, "0"
b3 = 0
EndIf
EndIf
Toggle PORTA.2
Wend

End                           ;Einde programma

Pullups! Dus pin hoog is schakelaar open, en laag is dicht.
Waarom zo moeilijk met die variabele. Je kant toch gewoon zeggen:


if portb.0 = 0 then
print at 1,1, "1"
else
print at 1,1, "0"
end if

moet die Dim b... As Bit niet Byte zijn?

pientertje, zo had ik het eerst ook staan, maar toen werkte het niet dus heb ik het aangepast. Ik zal het programma aanpassen.

stef, een knop kan toch alleen maar 0 of 1 zijn?

Kan je je gedachtengang van dit programma uitleggen ik volg het niet helemaal.
en zo is het leesbaar:


DEVICE 16F628                ;Gebruik een 16F628 type
CONFIG WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF, hs_OSC 
ALL_DIGITAL TRUE              ;Alle ingangen digitaal
XTAL 10                       ;Kristal van 20MHz
DIM b1 AS BIT;
DIM b2 AS BIT;
DIM b3 AS BIT;
DECLARE LCD_TYPE ALPHA
DECLARE LCD_INTERFACE 4
DECLARE LCD_LINES 4
b1 = 0
b2 = 0
b3 = 0
DELAYMS 500
CLS

WHILE 1 = 1
    IF PORTB.0 = 1 THEN
        IF b1 = 0 THEN
            PRINT AT 1,1, "1"
            b1 = 1
        ENDIF
    ELSE
        IF b1 = 1 THEN
            PRINT AT 1,1, "0"
            b1 = 0
        ENDIF
    ENDIF

    IF PORTB.1 = 1 THEN
        IF b2 = 0 THEN
            PRINT AT 1,3, "1"
            b2 = 1
        ENDIF
    ELSE
        IF b2 = 1 THEN
            PRINT AT 1,3, "0"
            b2 = 0
        ENDIF
    ENDIF
    IF PORTA.3 = 1 THEN
        IF b3 = 0 THEN
            PRINT AT 1,5, "1"
            b3 = 1
        ENDIF
    ELSE
        IF b3 = 1 THEN
            PRINT AT 1,5, "0"
            b3 = 0
        ENDIF
    ENDIF

    TOGGLE PORTA.2
WEND

END                           ;Einde programma

Volgende keer zelf even inspringen en commentaar toevoegen

het werkt nog steeds niet, ik gebruik een computervoeding als stroombron, kan het daar aan liggen?

edit: de variabelen zorgen er voor dat de gegevens op het display pas worden aangepast als de status van de knop niet gelijk is aan zijn vorige status.

[Bericht gewijzigd door Iemand op (44%)]

Even een hele code met interne oscilator. Schakelaar op portb.0 naar de gnd. Display aangesloten zoals op picbsic.nl:
http://www.picbasic.nl/images/schema_cursus4a.gif


DEVICE 16F628A                ;We gebruiken een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE              ;Alle ingangen digitaal
PORTB_PULLUPS ON    ;pullups aan

DELAYMS 500 ;display initialisatie

WHILE 1 = 1 ;eeuwige loop
    IF PORTB.0 = 0 THEN ;als schakelaar ingedrukt is...
        PRINT AT 1,1, "1"   ;dan 1 op het beeldschermpje
    ELSE    ;anders, dus schakelaar is los...
        PRINT AT 1,1, "0"   ;dan 0 op het beeldschermpje
    END IF
    
WEND
END

Op 1 maart 2009 11:39:08 schreef Iemand:

stef, een knop kan toch alleen maar 0 of 1 zijn?

Aja, vergeten |:-( , dan weten we dat ook weer :)

bedankt pientertje, het lag er aan dat ik geen PORTB_PULLUPS ON er in had staan.