Hallo,
Mein Project besteht zurzeit darin einen Stripe mit TM1829 im LowSpeed Modus(800khz) mithilfe eines Xmega anzusteuern.
Zur Verfügung steht PORTE mit der dortigen Hardware (USART mitr SPI Funktion,16bit Timer mit Compare).
Das Timing wird hier ausführlich beschrieben:
http://www.dmx4you.de/dmx2ledstripe/...LED-Stripe.htm
Dort steht das ein Low impuls für eine 0 nur 300ns sekunden lang ist.
Damit bleiben mir grademal 10 takte um den port auf low und wieder auf high zu schalten, was bedeutet das C und neuladen des Timers schonmal rausfällt.
Nehmen wir mal PORTE.PIN1.
Bedeutet wenn ich mir eine funktion schreibe die ungefähr so ausschaut:
Sollte ich doch genau auf meine 10 takte kommen oder ?Code:ldi r16,0b00000001 sts PORTE_OUTCLR,r16 nop nop nop nop nop nop nop nop sts PORTE_OUTSET,r16
STS braucht ja 2 takte und nop 1.
Anschließend hab ich (wieder in c) ja genügend zeit meinen nächsten Timerinterrupt einzustellen.
Natürlich könnte man statt der nops auch was sinnvolleres machen: z.b. bestimmen, ob ich jetzt 300ns oder 800ns (bei einem highbit) warten muss, oder die Zeit bis zum nächsten interrupt berechnen.
Solange man es in asm macht und die 8 takte pause nicht überschreitet is es ja kein problem....
Leider hab ich kein Oszi um das ergebnis zu prüfen.
Stimmt das so oder hab ich da einen Fehler in meiner logik ?







Zitieren

Lesezeichen