PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Attiny13 auf 57600 Baud ?



KaiP
01.04.2008, 02:30
Hallo,

uC-Programmierung ist noch relativ neu für mich.

Ich stehe vor folgendem Problem. Mein Testprogramm soll jede Sekunde "Test" an die serielle Schnittstelle senden. Mit 9600 Baud geht's problemlos, nur benötige ich 57600 Baud. Hier kommt vom ATtiny keine Rückmeldung mehr.

Eingestellt in den Chip-Settings ist: 57600 Baud, Crystal 1200000, Attiny13.dat. Bei den Schnittstellen-Einstellungen sagt Bascom auch richtigerweise: Not possible, egal was ich einstelle, weil der AVR keine Hardware-UART hat. Alle Werte sind auf 16 gestellt.

hier der Code:


$regfile = "attiny13.dat"
$crystal = 1200000
Baud = 115200

Open "comb.1:115200,8,n,1,INVERTED" For Output As #1

Do
Print #1 , "This is a test with 57600 Baud"
Wait 1
Loop

End


Wer kann mir helfen ?

Vielen Dank!

Kai

womb@t
01.04.2008, 07:33
Ich weiß nicht wieviel Performance die Soft-UART braucht, aber du hast ja nur 1200000Hz zur Verfügung, und deine UART soll 57600Bit/s haben, kann gut sein dass das Zeitlich so gar nicht mehr klappt! Der Tiny kann doch einiges mehr an Taktrate, mit geeignetem Quarz...

python_rocks
01.04.2008, 09:14
Mit 9600 Baud geht's problemlos, nur benötige ich 57600 Baud. Hier kommt vom ATtiny keine Rückmeldung mehr.

Eingestellt in den Chip-Settings ist: 57600 Baud, Crystal 1200000
Hallo Kai!

Lies dir das mal durch:
http://www.loetstelle.net/forum/viewtopic.php?p=7207#7207

Und noch etwas. Nimm den größtmöglichen Quarz. Denn Software UART belastet den µC enorm. Ich weiß nicht wie weit du mit der Baudrate nach oben gehen kannst, aber 115200 ist verdammt hoch.

Um in Bascom den Baudrechner einsetzen zu können, brauchst du nur vorübergehend einen anderen µC einstellen. Der Baudrechner sagt dir dann, ob die Quarzfrequenz für deine gewünschte Baudrate funktioniert oder nicht. 12 Mhz wäre für Baud 57600 gar nicht mal so schlecht. Nur 0,16 % abweichung. Für Hardware-UART würde das locker genügen.

In deinem Fall wäre es **vielleicht** mit einem 18,432 Mhz Quarz möglich, die 57600 raus zu holen. Aber wie viel ein genauer Quarz bei Software-UART bringt, kann ich dir nicht sagen. Zumindest habe ich bei Software-UART noch nie mehr als 9600 Baud gesehen.

Bei 12 Mhz und 57600 Baud hat der Attiny13 für jedes Bit nur 208 Takte zur Verfügung. In dieser Zeit muss LOW oder HIGH erkannt werden (was bei Hardware-UART, glaube ich, ca. 16 Ticks braucht). Dann muss das Bit noch in ein Register geshiftet werden, es muss mitgezählt werden, wieviel Bit schon angekommen sind. Dann muss noch das Datenframe überprüft werden, Stopbit, usw. Also bei 12 Mhz bleibt keine Zeit mehr für andere Dinge.

Bei 18,432 Mhz und 57600 Baud hat der ATtiny13 für jedes Bit 320 Takte zur Verfügung. Das ist immer noch sehr sehr wenig. Aber vielleicht ist das genug Zeit um die Daten korrekt zu empfangen. Nur bei 320 Takten je Bit hast du kaum mehr genügend Zeit um damit auch etwas anfangen zu können. Und wieviel die Software-UART von diesen 320 Takten aufbraucht, weiß ich nicht.

Diese Daten auch wieder zurück zu schicken -- das kannst du vergessen. Das Zurückschicken mit PRINT, blockiert den ATtiny13 total. Es kann in der Zwischenzeit nichts empfangen werden und einen Buffer kannst du auf Grund des fehlenden Speichers und der fehlenden Hardware-UART auch nicht einrichten.

Also, je mehr ich darüber nachdenke, desto eher glaube ich, dass du das mit dem ATtiny13 nicht oder nur sehr eingeschränkt zusammen bringst. Nimm einen besseren Mikrocontroller dafür. Irgendeinen mit Hardware-UART, z.B. einen ATtiny2313 oder gleich einen ATmega8.

mfg
Gerold
:-)

KaiP
01.04.2008, 13:02
Hallo,

Ich werde es mal mit einem ATmega8 probieren. Vielen Dank für die Antworten.

Kai