Jag kommer nog stöta på fler problem men här är en beskrivning av vad jag ska göra:
Programmet som jag försöker göra ska vara till en "massaccelerations-bänk"(bromsbänk) för att effektmäta motorer med hjälp av en trumma som accelereras.
En sensor registrerar varje varv och en 16-bitars timer mäter tiden i microsekunder(CPU 8MHz/presc 8 ) det tar för trumman att snurra ett varv.
Sen jämför jag tiden med tiden till föregående varv, tidskillnaden borde vara ett mått på vridmomentet. I SRAM har jag en 16-bitars variabel som uppdateras om ett större värde har erhållits(varvtid för max vrid).
Sen tar jag (0xffff-tiden)*tidskillnaden och jämför med en 32-bitars variabel i SRAM som uppdateras om ett större värde har erhållits, sparar då även tiden(varvtid för max effekt) i en annan 16-bitars variabel.
Okej, lite luddig förklaring men fråga om ni inte förstår hur jag menar.
Nu är problemet att jag tänker skriva ut värdena på en display som heter GDM1602K och är en vanlig standard-display. Som jag har det nu så ställer man ju in "data-bussen" till displayen och aktiverar en ledning(Enable)för att displayen ska veta att den kan läsa tecknet.
Det fungerar nu men då har jag gjort loopar för att åstadkomma tidsfördröjning på "Enable"-ledningen. Ser ut såhär:
Kod: Markera allt
SEND:
sbi LCD_set, LCD_E
rcall Delay
cbi LCD_set, LCD_E
ret
Detta är naturligtvis inte bra eftersom prosessorn behöver göra annat än snurra runt i en massa loopar.
Hur kan man göra för att få sändningen till displayen Timer-styrd istället?
Och hur kan man göra sändningarna lite smidigare än som jag har gjort dom, såhär:
Kod: Markera allt
Print_init:
ldi temp, WRITE_INST
out LCD_set, temp
ldi temp, FUNK_set
out LCD_data, temp
rcall SEND
ldi temp, WRITE_INST
out LCD_set, temp
ldi temp, LCD_on
out LCD_data, temp
rcall SEND
ldi temp, WRITE_INST
out LCD_set, temp
ldi temp, LCD_clr
out LCD_data, temp
rcall SEND
ldi temp, WRITE_INST
out LCD_set, temp
ldi temp, ENTRY_mode
out LCD_data, temp
rcall SEND
ldi temp, WRITE_INST
out LCD_set, temp
ldi temp, DDadress
out LCD_data, temp
rcall SEND
ret