Goede middag,
Het is er eindelijke van gekomen om mij in te schrijven bij co forum.
Kleine introductie, ben een oudere jongere die zins een jaar bezig met de cursus picbasic.
Kan het tot nu toe allemaal redelijk volgen maar loop nu vast in deel 4 van de cursus.
Onder staand programma heb ik aangepast, het is de dozen/flessen teller.
Heb eerst orgineel opgebouwd (dit werkt) heb daarna pin configuratie van lcd, leds en drukknop aangepast.
Lcd geeft juite tekst aan alleen werken de drukknoppen niet.
Wat doe/zie ik over het hoofd.
met vriendelijke groet,
pic basic code:
Device 16F628A ;Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT,_ ;Interne oscillator, geen clocksignaal naar buiten
WDT_OFF,_ ;WatchDog Timer uitgeschakeld
PWRTE_ON,_ ;Power-up Timer Enable ingeschakeld
LVP_OFF,_ ;Low Voltage Programming uitgeschakeld
MCLRE_OFF ;Externe Master Reset Enable uitgeschakeld
All_Digital TRUE ;Alle ingangen digitaal
;Logische constanten
Symbol AAN = 0 ;Geinverteerd AAN
Symbol OFF = 0 ;UIT
Symbol On = 1 ;AAN
Symbol UIT = 1 ;Geinverteerd UIT
Declare LCD_DTPin PORTB.0 ;De DATA aansluitingen moet nu aan PORTB.0
Declare LCD_ENPin = PORTA.3 ;De EN aansluiting moet nu aan PORTA.3
Declare LCD_RSPin = PORTA.4 ;De RS aansluiting moet nu aan PORTA.4
;Algemene constanten
Symbol AantalDozen = 5 ;Aantal dozen dat geproduceerd moet worden
Symbol AantalStuks = 12 ;Aantal stuks producten dat in een doos moet(VPE)
;Poortnamen
Symbol Gereed = PORTA.0 ;Hoog als productie klaar is
Symbol DoosVol = PORTA.7 ;Geeft puls als een doos vol is
Symbol ResetToets = PORTB.6 ;Deze pulstoets stelt de startwaarde weer in
Symbol TelPuls = PORTB.7 ;Impuls van de machine als er weer een fles klaar is
;Variabelen declareren
Dim DozenTeller As Byte ;Telt het aantal dozen
Dim StuksTeller As Byte ;Telt aantal stuks per doos
;76543210
PORTA = %00000000 ; alle portb laag maken.
TRISA = %01111110 ; PORTa.0 en a.7 zijn uitgangen voor de LED's
Clear ;Wis alle RAM geheugen
DelayMS 500 ;LCD stabilisering
;Hoofdprogramma
Cls ;Eerste keer scherm wissen
While 1 = 1 ;Oneindige lus
Print At 1, 1, "Stuks: ", @StuksTeller, " van ", @AantalStuks, " "
Print At 2, 1, "Dozen: ", @DozenTeller, " van ", @AantalDozen, " "
While (PORTB & 3) < 3 : Wend ;Wacht tot resettoets of puls van de machine weg is
DelayMS 20 ;Anti contactdender
While (PORTB & 3) = 3 : Wend ;Wacht op resettoets of puls van de machine
If DozenTeller < AantalDozen And StuksTeller < AantalStuks Then ;Order nog niet klaar?
If TelPuls = AAN Then ;Telpuls van de machine bij ieder afgeleverd product
Inc StuksTeller ;Weer 1 klaar, dus teller met 1 verhogen
If StuksTeller = AantalStuks Then ;Als doos vol is dan...
DoosVol = 1 ;Puls signaal voor machine: moet nieuwe doos invoeren
DelayMS 200 ;Pulstijd
DoosVol = 0 ;Signaal weer uitzetten
Inc DozenTeller ;Nieuwe doos erbij gekomen
Clear StuksTeller ;Reset aantal stuks per doos want nieuwe doos
EndIf
EndIf
Else
If ResetToets = AAN Then ;Als er op de resettoets wordt gedrukt dan...
Clear DozenTeller ;Reset de DozenTeller (op 0 zetten)
Clear StuksTeller ;Reset de StuksTeller (op 0 zetten)
Gereed = 0 ;Gereed signaal weer laag maken
EndIf
EndIf
If DozenTeller = AantalDozen Then Gereed = 1 ;Aantal dozen is bereikt
Wend ;Terug naar WHILE
End
[/code=picbasic]
[Bericht gewijzigd door Hugo Welther op zondag 29 januari 2017 17:16:30 (0%)