Attiny45 -Baudratenregister?

  • Hi,
    ich programmiere die Atmegas und Attinys
    über ein "MySmartUSB light" Dongel und programmiere mit Avr-gcc.
    Nun suche ich ein Baudratenregister beim Attiny45.
    Der soll eine sog "USI" haben.
    Mit dem Tiny2313, der lt. Datenblatt ebenfalls "nur" eine USI
    besitzt, habe ich das schon ein paar mal gemacht
    und konnte dann MIDI bei 31250 Baud senden, bzw. empfangen.
    Beim Tiny45 suche ich aber vergeblich UBRR(L/H) bzw. UCSR(A/B/C).
    Weiß jemand, wie man bei den Tiny45/85 die Baudraten für DI/DO
    programmiert?

    Thx,
    Heinrich

    "Volt, Watt, Ampere, Ohm, ohne mich gibts keinen Strom"

    Der Elektrolurch (Guru Guru)

  • Hallo Heinrich,

    wenn ich die beiden Datenblätter so vergleiche fällt mir auf, dass der ATtiny2313 nicht nur ein USI hat sondern auch eine USART. Das wird wahrscheinlich der Grund sein, weswegen du bei dem Attiny45 vergeblich das Register für die Baud-Rate suchst.

    Vielleicht hilft dir dass hier weiter:
    http://www.avrfreaks.net/forum/using-usi-uart-attiny-254585

    Mfg maxl

    Edited once, last by maxl95 (April 5, 2016 at 12:53 PM).

  • Hi maxl95
    Puh,
    nee, ich habe auch gerade das Datenblatt von Attiny25/45/85
    mit dem des tiny2313 bez. USI/USART verglichen.
    Der Tiny2313 hat in der Tat ne echte USART
    mit getrennten Transmitter bzw. Receiver
    und auch je ein Empfangsregister bzw. Senderegister.
    Bei der USI des tiny45 gibts nur Eines für Senden und Empfangen
    (naja und nen Zwischenregister (Buffer) "USIBR" nur für RX)
    Desweiteren blicke ich beim Tiny45 überhaupt nicht, wie man da den Takt generiert.
    Das muß irgendwie über Timer0 Compare mit nem Überlaufinterrupt gehen.

    Ich schwenk mal lieber wieder auf den 2313.
    Der Tiny45 ist wohl mehr was für ASM-Frickler.
    :)
    Hab Dank

    "Volt, Watt, Ampere, Ohm, ohne mich gibts keinen Strom"

    Der Elektrolurch (Guru Guru)

  • Servus Heinrich,
    also ich behaupte jetzt mal ganz frech, dass z.B. die Tiny85 (bzw. die Tiny, die Du meinst) gar keine Baudratenregister haben ;) ...
    Du kannst nämlich in der Arduino-IDE nicht einfach ein Serial.begin() machen, das kennt er nicht. Für serielle Verbindungen wirst Du da wohl SoftwareSerial verwenden müssen.
    Allerdings ist es afaik wichtig die fuses mit der Clockrate richtig einzustellen, sonst funktioniert die SoftwareSerial auch nicht ...

    cheers,
    -ds-


  • also ich behaupte jetzt mal ganz frech, dass z.B. die Tiny85 (bzw. die Tiny, die Du meinst) gar keine Baudratenregister haben ;) ...
    Du kannst nämlich in der Arduino-IDE nicht einfach ein Serial.begin() machen, das kennt er nicht. Für serielle Verbindungen wirst Du da wohl SoftwareSerial verwenden müssen.

    Jop du kommst bei den genannten Tinys nicht um einen Software Uart herum, gibts aber fertig:
    http://rn-wissen.de/wiki/index.php…ART_mit_avr-gcc
    http://funduino.blogspot.de/2012/02/attiny…are-serial.html

    Alternativ einen anderen AVR nehmen.

    lg kobold254

  • Hi und danke für den:
    http://rn-wissen.de/wiki/index.php…ART_mit_avr-gcc

    der Link zum Artikel "Software-UART" bei Roboter Netz ist super,
    so kann man ja auch nem Atmega8 z.B ne 2. UART verpassen.

    Der 2313 hat jedenfalls "nur" zuviele Beinchen, dafür aber ne einfachere UART.
    Ich brauche nur nen (mglst. PWM-) Ausgang und nen RX für 31,25KBaud, 8n1 am µC.
    RAM und Flash sollten beim 2313 auch noch genügen.
    Da ich mich dem ganzen PWM-Kram und der 8MHz Kalibrierung des internen Oszillators
    auchnoch widmen muß, nehm ich mir dafür also erstmal den 2313 vor.

    BTW:
    nimmt ein externer Quarz eigentlich mehr Strom als der interne Oszillator?
    (Ich hab 5V Ub für den µC nur über nen Vorwiderstand von 220R für das, was ich vorhabe.)

    "Volt, Watt, Ampere, Ohm, ohne mich gibts keinen Strom"

    Der Elektrolurch (Guru Guru)

  • Moin Heinrich,


    ... nimmt ein externer Quarz eigentlich mehr Strom als der interne Oszillator?

    das glaube ich nicht. Aber Du kannst den Tiny höher takten ( der Tiny85 z.B. hat intern nur 8 MHz, verträgt aber bis 20 MHz ).
    Allerdings, wenn ich mich recht entsinne, war wichtig darauf zu achten einen krummen Wert zu nehmen, damit man mit einem Divisor möglichst genau an die/eine gewünschte Baudrate kommt.

    cu,
    -ds-

  • Dann nimmt er aber auch mehr Strom
    und ich glaube glatte 8MHz sind mehr als genug für 31250 Baud.
    Bei MIDI kommt das nominell jedenfalls genau hin:
    Rein rechnerisch komme ich bei allen "glatten" Oszillatorfrequenzen
    bei dieser Baudzahl auch auf glatte Teiler:
    8000000/31250= 256, bei 4MHz entsprechend 128.
    Über den Daumen würde ich sagen, daß 256 Takte zwischen 2
    einfliegenden Byte schon recht gemütlichen Platz für die
    Verarbeitung bieten. (Schätze, da muß ich noch nicht rechnen :) )
    Bei der RS232 wirds halt krumm mit den internen Frequenzen.
    Da muß man sich dann eine Baudrate suchen, die so eng wie möglich
    bei einem glatten Teiler des Oszillators legt und das dann noch mit
    Kalibrieren hinschieben, damit die Bits nicht allzu schnell wegrennen.

    Das isses also nicht, aber MIDI schreibt eine Genauigkeit
    von +/- 1% vor und wenn man in das Datenblatt guckt, dann klafft
    bei der Betrachtung der Genauigkeit des internen Oszillators
    erstmal der Kiefer.
    Die interne Frequenz geht jedenfalls ganzschön spazieren,
    wenn die Bertriebsspannung schwankt.
    Aber vielleicht mache ich mir da auch zu viele Gedanken,
    mal gucken.

    "Volt, Watt, Ampere, Ohm, ohne mich gibts keinen Strom"

    Der Elektrolurch (Guru Guru)

  • Baud Rate Calculator:http://wormfood.net/avrbaudcalc.php
    Ein externer Quarz ist immer sinnvoller (insbesondere für UART), der zusätzliche Stromverbrauch ist (sehr häufig, in diesem Fall auch) vernachlässigbar (Nanoampere Bereich oder weniger)

    Heinrich schrieb:
    (Ich hab 5V Ub für den µC nur über nen Vorwiderstand von 220R für das, was ich vorhabe.)

    Für den Atmega brauchst du keinen Vorwiderstand.
    Du solltest noch bedenken, dass du für eine möglichst geringe Stromaufnahme am besten eine geringe Spannung wählst (je geringer, desto besser)
    Außerdem kannst du durch eine gute Programmierung und setzen von Fuses und diversen Registern ebenfalls Energie sparen (z.B. Referenzspannung für den ADC, Watchdog etc.)


    dreamshader schrieb:
    Allerdings, wenn ich mich recht entsinne, war wichtig darauf zu achten einen krummen Wert zu nehmen, damit man mit einem Divisor möglichst genau an die/eine gewünschte Baudrate kommt.

    Ja und nein, es gibt Quarze die für serielle Schnittstelle optimale krumme Werte haben, siehe im Baud Rate Calculator.

    Much Fun! :thumbs1: :bravo2:

    Edited once, last by kobold254 (April 6, 2016 at 7:03 PM).

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!