hoe kan je een puls exact 5 seconden laten duren?
met een pic 16f873.
ik programmer met proton ide, pic basic.
een ic pin is continu laag en moet 5 seconden hoog zijn.
Hoe exact is exact?
Een timer pakken. Die laten interrupten na een x aantal interrupts (bv 250 bij 20mS interrupt) en dan gewoon je port 0/1 maken.
ElecM
aka m.devriesjr
Timer0 gebruiken, gaat een flagbitje hoog staan als hij op nul is. Bij de timer (als aangezet) zal hij vanaf een waarde die in het timer register staat naar nul tellen etc.
Prescaler erbij gebruiken en op 1:256 zetten, wat betekent dat 1 timerwaarde 256 kloksignalen duurt. De kloksignalen hangt af van het kristal en is een vierde van de kristalfrequentie. Periodetijd is dus 1/frequentie..
Waarschijnlijk kan je dan beter een stukje ASM tussen voegen, en op deze site de delay code laten genereren.
Dan maak je je uc 5sec onbruikbaar. Lijkt mij niet echt handig. Tenzij dit het enige doel is in zijn leven natuurlijk.
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Als dat puls-timen het enige is wat de pic moet doen, kun je gewoon een for-next loop maken. In assembler, dan weet je precies hoeveel cycles de loop duurt. En dan uitrekenen hoeveel itteraties de loop moet maken. Klaar.
picsels
Volgend project: 7-seg gaming displays; dan dec-1982 labvoeding afmaken, dan funcgen met ad9833 afmaken, dan...
klein is fijn
Moderator
Een PIC16F873 is een geval met best veel pinnen, lijkt me sterk dat het ding niets anders te doen staat. Dat wordt dus een timer gebruiken.
Als dat ding wel niets staat te doen, dan heb je de verkeerde PIC gekozen.
Als dat ding wel niets staat te doen, dan heb je de verkeerde PIC gekozen.[/message=897858,quote]Op 4 januari 2009 22:11:06 schreef klein is fijn[/message]:
Een PIC16F873 is een geval met best veel pinnen, lijkt me sterk dat het ding niets anders te doen staat. Dat wordt dus een timer gebruiken.
De pic staat idd in deze 5 seconden niks te doen.
De rest van de pinnen heb ik later nodig.
Hoe krijg ik zo precies mogelijk een wachttijd van 5 seconden? Moet ik dan ook een externe oscillator nemen?
zoiets?
DELAYMS 5000
Lithium
Zeg me wat je nodig hebt en ik zal je vertellen hoe je zonder kunt
Op 5 januari 2009 17:41:18 schreef snip:
Hoe krijg ik zo precies mogelijk een wachttijd van 5 seconden? Moet ik dan ook een externe oscillator nemen?
zoiets?DELAYMS 5000
Zo wacht de pic inderdaad 5 seconden.
Hoe precies dat is weet ik ook niet, maar als je een externe kristal hebt neem ik aan dat het toch behoorlijk precies is.
Echter kan je in die 5000 MS niks naders doen.
De pic wacht dan echt 5000 MS
Op 5 januari 2009 17:45:44 schreef Lithium:
[...]Zo wacht de pic inderdaad 5 seconden.
Hoe precies dat is weet ik ook niet, maar als je een externe kristal hebt neem ik aan dat het toch behoorlijk precies is.
Echter kan je in die 5000 MS niks naders doen.
De pic wacht dan echt 5000 MS
Maakt het nog uit wat voor kristal ik er op doe ? 4mhz of 20mhz ofzo?
Voor de delay zelf niks, maar wel voor de werksnelheid van de pic. Je keuze is afhankelijk van zijn taak.
klein is fijn
Moderator
Op 5 januari 2009 18:22:08 schreef snip:
Maakt het nog uit wat voor kristal ik er op doe ? 4mhz of 20mhz ofzo?
Des te hoger de frequentie des te kleiner zal de eventuele afwijking van het delayms commando worden.
Op 5 januari 2009 18:47:42 schreef klein is fijn:
[...]Des te hoger de frequentie des te kleiner zal de eventuele afwijking van het delayms commando worden.
ik wilde de display testen alleen de compiler geeft een fout bij de config regel wat gaat hier mis?
pic is een 16f873A
DEVICE 16F873A
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
DELAYMS 500
CLS
PRINT "test test"
END
Wat dacht je van de foutmelding lezen?
Invalide fuse setting [MCLR_OFF]
Moet genoeg zeggen lijkt mij.
Dit zijn zeker de standaard fuses die je zou uit de picbasic cursus voor de16f628a!! hebt geplukt. Die kan je niet zomaar voor een andere pic gebruiken. Elke pic heeft zijn eigen fuses, die zijn terug te vinden in de datasheet. Op download van het picbasic forum(www.picbasic.org) de fuse configurator plugin. Dan krijg je een overzicht van alle fuses bij de gekozen pic.
klein is fijn
Moderator
Picbasic heeft standaard instellingen. Een hd44780 met data op b4-b7, rs op b3 en en op b2. Dus als je niks op geeft gaat picbasic er vanuit dat alles zo aangesloten is.
Fout zit hier in:
Invalide fuse setting [MCLR_OFF]
Op 5 januari 2009 20:12:12 schreef bassie-:
Picbasic heeft standaard instellingen. Een hd44780 met data op b4-b7, rs op b3 en en op b2. Dus als je niks op geeft gaat picbasic er vanuit dat alles zo aangesloten is.Fout zit hier in:
Invalide fuse setting [MCLR_OFF]
welke config regel zou goed moeten zijn?
fuse configurator werkt bij mij niet lekker...
(ik gebruik geen extern kristal)
Lithium
Zeg me wat je nodig hebt en ik zal je vertellen hoe je zonder kunt
Op 5 januari 2009 18:22:08 schreef snip:
[...]
Maakt het nog uit wat voor kristal ik er op doe ? 4mhz of 20mhz ofzo?
Hoe hoger de snelheid hoe nauwkeuriger hij is.
Je moet dan wel de externe osc aan zetten, je hebt nu de interne aan staan deze is minder nauwkeurig.
Ook moet je natuurlijk de goede snelheid in je config aanpassen.
Heb je bijv een 20 mhz kristal en je stelt 4 in dan kloppen de tijden natuurlijk niet meer.
CONFIG CP_OFF, DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_OFF, BODEN_OFF, PWRTE_ON, WDT_OFF, HS_OSC
Ook allemaal in de datasheet te vinden.
Op 5 januari 2009 20:52:51 schreef bassie-:
CONFIG CP_OFF, DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_OFF, BODEN_OFF, PWRTE_ON, WDT_OFF, HS_OSCOok allemaal in de datasheet te vinden.
ik krijg geen tekst op de lcd...
(de lcd is niet kapot, getest met een ander ic)
ik heb +5v op pin 20 ziiten en gnd op 8
DEVICE 16F873A
CONFIG CP_OFF, DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_OFF, BODEN_OFF, PWRTE_ON, WDT_OFF, HS_OSC
DECLARE LCD_ENPIN = PORTb.2
DECLARE LCD_RSPIN = PORTb.3
DELAYMS 500
CLS
PRINT "test test"
END
picsels
Volgend project: 7-seg gaming displays; dan dec-1982 labvoeding afmaken, dan funcgen met ad9833 afmaken, dan...
Op 5 januari 2009 20:19:28 schreef snip:
[...]
(ik gebruik geen extern kristal)
Dan moet je in de config regel niet HS_OSC maar INTRC_OSC_NOCLKOUT zetten.
Delayms 5000Dit werkt d8 ik alleen redelijk nauwkeurig als je geen (timer) interrupts gebruikt.
Overigens: die fuse configurator werkt bij mij ook niet (IDE 1.0.6.4 en compiler 3.3.4.8).
[Bericht gewijzigd door picsels op (16%)]
Op 5 januari 2009 23:31:05 schreef picsels:
Delayms 5000Dit werkt d8 ik alleen redelijk nauwkeurig als je geen (timer) interrupts gebruikt.
Wat bedoel je hier mee?
Met welke code krijg ik een nauwkeurige delay van 5 seconden?
Op 5 januari 2009 23:31:05 schreef picsels:
[...]
Dan moet je in de config regel niet HS_OSC maar INTRC_OSC_NOCLKOUT zetten.
DEVICE 16F873a
CONFIG INTRC_OSC_NOCLKOUT, CP_OFF, DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_OFF, BODEN_OFF, PWRTE_ON, WDT_OFF
ALL_DIGITAL TRUE
DECLARE LCD_ENPIN = PORTb.2
DECLARE LCD_RSPIN = PORTb.3
high porta.0
high portC.0
DELAYMS 500
CLS
PRINT "test test"
END
Krijg nog steeds foutmelding: invalid fuse setting [INTRC_OSC_NOCLKOUT]