Hallo Forum,
ich versuche seit einiger Zeit auf dem Atmega328 einen Software-UART zu
betreiben. Ich verwende den Code, welchen Atmel bereitstellt(AVR304:
Half Duplex Interrupt Driven Software UART on tinyAVR and megaAVR
devices, siehe Anhang). Der Code ist ursprünglich für 8MHz, ich betreibe
den ATmega aber mit 16MHz und den UART mit 38400 Baud. Folgender Code
ist für das Timing zuständig:
1 | #ifdef BR_38400
|
2 | #define TICKS2COUNT 25 //!< Ticks between two bits.
|
3 | #define TICKS2WAITONE 25 //!< Wait one bit period.
|
4 | #define TICKS2WAITONE_HALF 38 //!< Wait one and a half bit period.
|
5 | #endif
|
Jetzt habe diese Werte einfach verdoppelt (wegen der doppelten
Taktrate), aber HTerm bringt nur Mist. Auch wenn ich den Atmega mit dem
internen Takt bei 8MHz betreibe bekomme ich nur Schrott. Wenn ich das
Oszi dranhänge, sehe ich, dass etwas gesendet wird. Es kommt mir aber so
vor als ob nur ein Zeichen gesendet wird, obwohl ich in einer Schleife
jeweils 10 Zeichen senden will.
Ich weiss einfach nicht mehr weiter. Vielleicht kann mir von Euch jemand
erklären, was ich falsch mache.
Vielen Dank im Voraus.
Andreas