Ja maar de ledjes moeten blijven knipperen als je KnopIn loslaat doet ie bij mij niet...

Bij mij dus wel heb je al die 10K over porta.3 al geprobeerd ?

en

TRISB = %00000001
TRISA = %00001000

Al toegevoegt ?

Het was me nog niet opgevallen dat je de KnopIn aan PORTA had zitten.
Deze moet je aan een PORTB doen, die hebben namelijk interne pull-ups.
Je KnopIn toets zweeft nu als je hem niet indrukt.
En je kunt het beste de LED's op PORTA zetten.

Gaan beide LED's aan?
Heb je de LED's wel aangesloten tussen PORT en 0V (via een serie weerstand van 1k)?
Dus niet tussen PORT en +5V!

Ik durf het ernstig te betwijfelen, lezen is kennelijk niet zijn sterkste punt.

maar ja zo hebben we allemaal wel wat)

Op 5 november 2007 20:37:28 schreef Frits Kieftenbelt:
Het was me nog niet opgevallen dat je de KnopIn aan PORTA had zitten.
Deze moet je aan een PORTB doen, die hebben namelijk interne pull-ups.
Je KnopIn toets zweeft nu als je hem niet indrukt.
En je kunt het beste de LED's op PORTA zetten.

Gaan beide LED's aan?
Heb je de LED's wel aangesloten tussen PORT en 0V (via een serie weerstand van 1k)?
Dus niet tussen PORT en +5V!

Zweven zal ie niet doen want die zit met een weerstand aan +VDC. Of zie ik dat verkeerd?

Ja de leds heb ik zo aangesloten uiteraard met een weerstand. Die zaten vanaf het begin al zo, maar in principe zou een led ook met een GND van de port aangestuurd kunnen worden met de juiste programma aanpassing?

In principe mogen de leds toch ook op PORTB blijven?
Als ik de PULLUPS niet gebruik maar de inputs met een weerstand aan +VDC aansluit dan moet het toch ook werken?

@ Gerwinh: zal het zo proberen heb die pic inmiddels meer dan een paar honderd keer geprogrammeerd. Ik rkijg trouwens een foutmelding de laatste IF want Endif ontbreekt en ook met Endif hou ik fouten volgens Proton!

Ik hou jullie op de hoogte :)
Alvast bedankt :)

Ik denk dat Proton ook een beetje gek is geworden.
Wat krijgen jullie met dit:

 
 Device 16f84A 
 CONFIG PWRTE_ON
 
 ALL_DIGITAL TRUE
 
;        76543210              <<<Een hulpregeltje
TRISB = %00000001            
TRISA = %00001000

 symbol KnopIN  = porta.3     ;Door Switch Input
 symbol ResetIN = portb.0     ;Reset Key Input
 
 symbol Led1OUT = Portb.3     ;Lamp 1 Output
 symbol Led2OUT = portb.4     ;Lamp 2 Output
       
 DIM BD1   AS BYTE            ;Dummy voor de FOR...NEXT          
 
 Clear  
                                    
 

 ;Hoofdprogramma
 While 1=1
   WHILE KnopIn = 1 : WEND    ;Wacht tot er op KnopIn wordt gedrukt
 
   WHILE 1 = 1
     toggle led1out
     toggle led2out
     FOR BD1 = 1 TO 50        ;50 x 10 = 500mSec
       delayms 10             ;Meet om de 10 milliseconden de resettoets
       IF ResetIn= 0 tHEN GaVerder
       Endif
       NEXT   
       
   WEND                       ;RESET knop ingedrukt=1
 
 GaVerder:                    ;Hier verdergaan na ResetIn
   low led1out
   low led2out    
   
   wend     

Ik krijg \:

While without wend
Misplaced wend
En ook nog een if error

Snap er nu niks meer van

Ik proef hier teveel fouten zodat ik er op afstand ook niet uit wijs kan.

Bouw een programma langzaam op en test ieder stukje dat je programmeert steeds uit door dit in de PIC te programmeren.

Begin dus helemaal opnieuw, niet meteen teveel inprogrammeren.
Laat bijvoorbeeld eerst alleen een LED afhankelijk van de druktoets branden.
Als dat al niet werkt moet je dat eerst uitzoeken voordat je verder gaat.

Programmeer bijvoorbeeld als hoofdprogramma:


TRISA = %11111110
PORTB_PULLUPS ON

WHILE 1 = 1
  PORTA.0 = PORTB.0
WEND

Waarbij op PORTA.0 een LED zit aangesloten en een toets tussen PORTB.0 en GND.
Als je op de toets drukt moet de LED daarop reageren.

EDIT:
Die foutmeldingen komen omdat je een losse ENDIF in je programma hebt staan.

En je bent het XTAL ook vergeten want die staat er niet tussen

Oh ja...

Ik ben het nu zat.
De 16F628 is binnen ik ga het nu daar mee proberen :(

Gebruik dan deze code


 Device 16f628A 
 CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
 
 ALL_DIGITAL TRUE
 
;        76543210              <<<Een hulpregeltje
TRISB = %00000001            
TRISA = %00001000

 symbol KnopIN  = porta.3     ;Door Switch Input
 symbol ResetIN = portb.0     ;Reset Key Input
 
 symbol Led1OUT = Portb.3     ;Lamp 1 Output
 symbol Led2OUT = portb.4     ;Lamp 2 Output
       
 DIM BD1   AS BYTE            ;Dummy voor de FOR...NEXT          
 
 Clear  
                                    
 PORTB_PULLUPS ON             ;Interne pullups voor de schakelaars

 ;Hoofdprogramma
 While 1=1
   WHILE KnopIn = 1 : WEND    ;Wacht tot er op KnopIn wordt gedrukt
 
   WHILE 1 = 1
     toggle led1out
     toggle led2out
     FOR BD1 = 1 TO 50        ;50 x 10 = 500mSec
       delayms 10             ;Meet om de 10 milliseconden de resettoets
       IF ResetIn = 0 THEN GaVerder
     NEXT
   WEND                       ;RESET knop ingedrukt=1
 
 GaVerder:                    ;Hier verdergaan na ResetIn
   low led1out
   low led2out                 
  
 Wend  

Die werkt 1000% goed en prop dan direct een weerstand van 10K tussen +5V en porta.3 als het dan niet werkt moet je je toch eens goed achter de oren krabbelen


:100000002F2883178001840AFF3E031D02282A2817
:10001000A301A200FF30A207031CA307031C2A2888
:100020000330A100DF3016200A28A101E83EA0001D
:10003000A109FC30031C1F28A00703181C28A007D7
:100040000000A10F1C2820182528A01C292800002A
:1000500029280800831383120313000008000730C7
:100060009F00013083168600083085002030840010
:10007000603083120220A0308400503002202030F3
:10008000840030300120831681138312851D492896
:10009000462808308606831686111030831286069D
:1000A0008316061201308312A5003330250203188F
:1000B00060280A30082006185E286128A50F5528F8
:1000C000492886118316861183120612831606129A
:0400D000831245282A
:02400E00503F21
:00000001FF

En de hex file ^^^^^^^^

@ Gerwinh:

Thanks!
Deze doet het maar niet helemaal goed.

Volgens mij stoppen de ledjes zomaar met knipperen dan blijven ze aan of uit (heeft het met BD te maken?).

Als Reset ingedrukt is:
- de ledjes blijven aan als knopaan ingedrukt is
- de ledjes blijven uit als knopaan 'los' is

In principe werkt reset goed maar beiden leds zouden aan moeten blijven zolang reset ingedrukt is en uiteraard uitgaan als ik reset loslaat (knopaan moet dan ook los zijn anders moeten ze weer gaan knipperen bnij het loslaten van reset).

Maw:

Geen actie / opstarten= leds uit
KnopAan indrukken= leds gaan knipperen tot dat er gereset is
Reset ingedrukt= altijd leds aan
Reset los= ledjes uit en begin opnieuw (als knopin ingedrukt wordt of in moeten ze dan weer gaan knipperen)

IF ResetIn = 0 THEN GaVerder

vervangen door deze 4 regels mischien dat het dan wel werkt ?

IF ResetIn = 0 THEN GaVerder
delayms 20
WHILE Resetin = 0 : WEND
delayms 20

Nee werkt niet.
Knippert heel langzaam en bij reset ingedrukt zijn de uitgangen aan wanneer knopaan is ingedrukt en uit wanneer de knop los is.

PicBasic is niet zo makkelijk :)
Of ik moet veel meer oefenen :)

ik zit echt m'n best te doen om het te begrijpen.. maar wat is nu de bedoeling?

moeten de leds gaan knipperen als KnopAan kort ingedrukt wordt, en weer uit met een korte druk op reset?

KnopAan in drukken= leds gaan knipperen tot dat er gereset is

of, moeten de leds net zo lang blijven knipperen zolang de reset aan is

Reset ingedrukt= altijd leds aan
Reset los= ledjes uit en begin opnieuw

dus leg even rustig uit (met goede zinnen) wat je precies wilt maken en wat het moet doen. immers.. als wij het niet begrijpen kunnen we je ook niet helpen.

ja sorry het is nu ook iets veranderd.
Als volgt:

Bij het opstarten staat alles uit

ResetIn ingedruk = beide leds aan wat er ook gebeurd maakt niet uit hoe de andere ingang(en) zijn.

Zodra KnopIn ingedrukt wordt(ResetIn is uit) moeten de ledjes knipperen en blijven knipperen ook als KnopIn los gelaten wordt.

Om de ledjes uit te zetten moet je ResetIn indrukken (de leds blijven wel continuo aan zolang reset is ingedrukt) en dan weer loslaten.

Bij het loslaten van ResetIN begint alles opnieuw of maw:

Als bij het loslaten (van ResetIN) KnopIn ingedrukt is moeten de leds uiteraard weer gaan knipperen, anders moeten ze uit blijven.

Ik hoop dat het een beetje duidelijk is..
Alvast bedankt

kijk.. dat is al een stuk duidelijker. :)

EDIT: ik had net niks te doen en heb het eens opgebouwd op breadbord. en de volgende code werkt perfect:


 Device 16f628A 
 CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
 
 ALL_DIGITAL TRUE
 
;        76543210              <<<Een hulpregeltje
TRISB = %00000001            
TRISA = %00001000

 symbol KnopIN  = porta.3     ;Door Switch Input
 symbol ResetIN = portb.0     ;Reset Key Input
 
 symbol Led1OUT = Portb.3     ;Lamp 1 Output
 symbol Led2OUT = portb.4     ;Lamp 2 Output
 DIM BD1   AS BYTE            ;Dummy voor de FOR...NEXT               
                                  
 PORTB_PULLUPS ON             ;Interne pullups voor de schakelaars

hoofdprogramma:

if ResetIN = 1 then ;als reset ingedrukt wordt
  high Led1OUT       ;leds aan
  high Led2OUT
else                 ; anders..

  if KnopIN = 1 then   ; als knop ingedrukt wordt,
    while ResetIN = 0  ;zolang reset nog niet ingedrukt is:
    
	   toggle led1out ; leds laten knipperen
       toggle led2out
	   FOR BD1 = 1 TO 50        ;50 x 10 = 500mSec
       delayms 10             ;Meet om de 10 milliseconden de resettoets
      
	   IF ResetIn = 1 THEN GaVerder ; als reset wordt ingedrukt dan: 
       NEXT
    wend 
GaVerder: ;stoppen met knipperen
 
 end if
 low Led1OUT ;geen knoppen ingedrukt?
 low Led2OUT ;dan leds uit
end if

goto hoofdprogramma ; begin opnieuw

waarom wil je 2 pinnen tegelijk laten togglen? is toch dubbel?

ben wel benieuwd waarvoor je het wilt gaan gebruiken..

danny

edit2: programma nog iets aangepast.

waarschijnlijk is het gelukt met het programma, maar dat weten we nu dus niet :(

IK vindt het jammer dat de TS niks meer van zich laat horen...

Maarja, aan de hand van zijn postgeschiedenis komt dat toch niet echt als een verrassing.

Niet meteen zo negatief hé
had het heel druk!

ga nu verder
laat het uiteraard weten!

Nouja sorry hoor, maar ik had een paar topics van je bekeken en die hadden allemaal een open einde.

Op 12 november 2007 17:09:07 schreef René Kramer:
Nouja sorry hoor, maar ik had een paar topics van je bekeken en die hadden allemaal een open einde.

Valt wel mee.
Alleen de laatste maar ik ben er nog mee bezig.

Ik laat het zsm weten.

Misschien een enorm domme vraag hoor, maar welke programmeertaal zie ik hier boven gebruikt?

Domme vragen bestaan niet, domme antwoorden wel

Maar antwoord op je vraag: Proton Pic Basic
kijk hier maar eens:
www.picbasic.nl
http://www.picbasic.org/proton_lite.php

[Bericht gewijzigd door marcob op (51%)]

hier werkt de code prima.. heb je een pull up weerstand aan pin 2 van de pic? en een kleine c over voeding van de pic?

Op 15 november 2007 19:19:35 schreef Danny:
hier werkt de code prima.. heb je een pull up weerstand aan pin 2 van de pic? en een kleine c over voeding van de pic?

Het werkt nu thanks.
Ik heb je trouwens gemaild :)