Hallo,
ich brauche einen 500kHz Tackt um damit ein Display anzusteuern.
Nachdem das ganze nicht funktioniert hat, hab ich das Programm mal
zerpflückt (restliche Programmteile entfernt) und etwas komisches beim
Timer festgestellt.
Ich hab nen At90CAN128 mit 16MHz
verwende ich ihn mit 125Hz und lasse test nur bis 125 zählen, dann
leuchted die LED, für eine Sekunde - so weit so gut.
stelle ich aber wie im Code auf 500kHz dann leuchted sie fast 3 sek.
kann mir das jemand erklären?
ach ja welche der beiden 500kHz varianten würdet ihr bevorzugen (ändert
nichts an meinem Problem)?
Danke,
Michi
Dein Interrupt bei 500 kHz soll alle 32 Taktzyklen aufgerufen
werden. Ist auch so eingestellt.
Aber wieviele Taktzyklen braucht die Interruprroutine?
Schreib doch mal die Antwort auf meine Frage und du hast die
Antwort auf deine Frage!
avr
uff du meinst er braucht länger für die Ausführung von
1
if(test==500000){
2
if(test2){
3
test2=0;
4
PORTB|=(1<<PIN2);//Led an
5
}else{
6
test2=1;
7
PORTB&=~(1<<PIN2);
8
}
9
test=0;
10
}
11
test++;
länger als 32 taktzyklen...
hmmm, dann wird des echt schwer, da was ordentliches auf die beine zu
stellen....
wie finde ich denn dann raus, welche operationen wieviele tacktzyklen
brauchen? (hab leider nicht viel ahnung von Assembler)
Michi-S schrieb:
> ein display ansteuern, dazu reichen mir auch ca. 65kHz, aber der code> ist auch länger...
Es wäre sinnvoller, mal einen Link auf das Datenblatt des LCD zu posten.
Ein LCD ohne eigenen Controller anzusteuern, ist schon recht tricky, da
brauchts Assembler. In der Codesammlung ist was dazu.
Peter
ja so hier der link,
http://www.screenkeys.com/downloads/LC16.2%20ScreenKey%20Datasheet.pdf
wenn ich es mit kleinster Tacktrate (50kHz) betreiben will, muss ich
aber alle 25kHz den timer auslösen lassen, weil ich ja die clock leitung
togglen muss. mir bleiben also 160 takte um das bit um das jeweilige bit
zu setzen
Die Ansteuerung ist ja echt bescheuert...
Du könntest dir die Arbeit mit einem Trick aber stark vereinfachen:
Den Takt erzeugst du mit einem Timer im CTC Modus.
Die Daten werden synchron zu dem Takt übertragen, aber davon abgesehen
in dem Stil wie normale UART Daten. Falls du also noch den UART frei
hast, stell den so ein, dass er den externen Takt verwendet, und sende
einfach die Daten per UART, das erspart einiges an Rechenleistung.
Hallo Michi-S,
da hilft nur das Datenblatt (aber das richtig).
Es ist eine normale synchrone serielle Übertragung.
Startbit, 8 Datenbit, Parity, 2xStop (Datenblatt Figur 17.4)
Die Clockeinstellung und Flanke ist auch kein Problem
Table 17.1 und Abschnitt 17.4.4
Dann läuft es alles in Hardware mit UDRx als Daten.
gruß avr
Hoffe, du hast noch eine der beiden USART frei ;)
Wenn du sowas brauchst, stimmt bei dir irgendwas nicht. Kein Wunder,
dass der Rest dann nicht funktioniert.
Hast du überall -mmcu=at90can128 in deinem Makefile drin (beim
Compilieren und beim Linken)?
FERTIG!!!
@dl8dtl
jetzt wo dus sagst, keine Ahnung warum das da noch drin ist, kommt davon
wenn man alten Code schnell noch mal hernimmt zum testen ^^
aber -mmcu=at90can128 ist natürlich überall drin.
@benedikt
habs genau so gemacht wie du gesagt hast, hat priema funktioniert!
MERCI!
Werd aber bei gelegenheit noch mal probieren ob ich den Tackt nicht
irgendwie schöner hinbekomme (würde des auch mit der Baudrate Ausgabe
auf XCK funktionieren oder ist dann nur beim senden Tackt da?)
Ich hab das funktionierende Programm mal in den Anhang, falls noch
jemand auf die Idee kommt sowas zu machen.
Nur schade dass man nen uart braucht, hätte gerne die dinger mit nem
kleinen atmel (Tiny oder so) als Treiber verwendet. So dass man dem
Treiber entweder Daten seriell (uart dens nicht mehr gibt) oder per I2C
schickt und der die Daten dann an die einzelnen Taster verteilt. So hätt
ich das ganze vom PC und vom uC einfach steuern können.
Was ist denn der kleinste/billigste Atmel mit 2 Uarts?
Michi-S schrieb:
> Werd aber bei gelegenheit noch mal probieren ob ich den Tackt nicht> irgendwie schöner hinbekomme (würde des auch mit der Baudrate Ausgabe> auf XCK funktionieren oder ist dann nur beim senden Tackt da?)
Musst du mal ausprobieren. Dem Diagramm im Datenblatt nach könnte es so
sein, aber eine echte Bestätigung habe ich beim Überfliegen des Textes
nicht finden können.