http://www.elektronikforumet.com/forum/ ... =7&t=47570
I tidigare tråd fin kod exempel.
Tidtagningen skickar ut tiondelen under rullande tid vilket gör att tiondelen sparas tio gånger per sekund och sen vissas på displayen.
Detta fungerar utmärkt på den LED display jag byggde tidigare, men inte på den elektromekaniska displayen.
Led displayen använder ingen delay, mellan skiftningarna som behövs för den elektromekaniska.
Den elektromekaniska hinner bara visa 3-4 siffror på en sekund, då displayen behöver 2x70 ms totalt 140 ms för att skifta en siffra från t.ex. 4->5.
Allt fungerar bra tills måltiden kommer, då kan tiondelen bli den tidigare siffran och alltså missvisande.
Löste det problemet genom att inte visa tiondelen utan bara sekunder under rullande tid (vid tidtagning).
Efterföljande problem:
Tidtagningsklockan skickar ibland ut den rullande tiden för fort och vid måltid precis innan omslag t.ex. 9 sek till 10 sek.
Den rullande tiden har blivit 10 sek men måltiden är t.ex 9.90, då visar displayen 19.90 istället.
Displayen har alltså sparat och stiftat 1:an för 10 sekunder, men lyckas inte spara att den skall släcka 1:an igen.
Detta sker alltså under tiden då delayen för att skifta 1:an för 10 sek och ISR lyckas inte spara att den siffran skall släckas igen.
Tidtagningen skickar t.ex. måltiden från t.ex minuter ner till hundradelen.
Nu till frågan.
Är det någon skillnad på att sätta upp en timer som utför väntetiden på 70 ms mot en delay?
Kod: Markera allt
; **************************************************
; Rutin för att sända ett tecken till 7-seg LED display
; Bit-mönstret ska ligga i "portb" före anrop
; **************************************************;
send_to_display
;
BcF clr_digit ; Pulsa "Clr_digit" för att släcka de segment som inte skall visas.
call Delay_70ms ; Vänta 70 ms
BsF Clr_digit ; Sätt "Clr_digit" hög igen.
;
BcF Set_digit ; Pulsa "Set_digit" för att sätta de segment som skall visas.
call Delay_70ms ; Vänta 70 ms
BsF Set_digit ; Sätt "Clr_digit" hög igen.
;
RETURN