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.

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.

http://www.piclist.com/cgi-bin/delay.exe

Dan maak je je uc 5sec onbruikbaar. Lijkt mij niet echt handig. Tenzij dit het enige doel is in zijn leven natuurlijk.

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.

@flipflop: volgens mij is dat precies wat MMSoft aangaf...

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                   

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.

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.

Lijkt me sterk dat die PIC uit zichzelf weet wat voor display er waar aanhangt.

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)

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_OSC

Ook 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          

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 5000

Dit 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 5000

Dit 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]

Dat klopt.

RC_OSC
LP_OSC
XT_OSC
HS_OSC

Ga die datasheet nou eens bekijken.