Forum: Mikrocontroller und Digitale Elektronik ATTiny2313 Software UART


von sn00py (Gast)


Lesenswert?

Hallo

Ich brauche eine zweite UART auf dem ATTiny, die sollte so 
prozessorsparend wie möglich sein ;)

Habe diese gefunden 
(http://www.siwawi.arubi.uni-kl.de/avr_projects/#softuart) aber die 
braucht soviel ich sehe eine hohe Prozessorlast (da Timerbasierend)

Diese sieht zwar toll aus 
(Beitrag "Software UART mit FIFO") aber irgendwie 
lässt er mir die auf einem ATTiny2313 nicht compilieren vermute dem geht 
das eine oder andere ab oder?
(zB.: T1FR1, T1M1 ... )

sonst hängt nichts auf dem tiny drann, nur die zwei UARTS (und eventuell 
wo ne led oder so ... )

welches nehmen?

von Oliver J. (skriptkiddy)


Lesenswert?

sn00py schrieb:
> Habe diese gefunden
> (http://www.siwawi.arubi.uni-kl.de/avr_projects/#softuart) aber die
> braucht soviel ich sehe eine hohe Prozessorlast (da Timerbasierend)
Alle mir bekannten Software-UARTS laufen über Timer. Wie soll man auch 
sonst das exakte Timing einhalten? Diese Lösungen brauchen auch immer 
mehr Prozessorzeit als Hardware-UARTS.


> lässt er mir die auf einem ATTiny2313 nicht compilieren vermute dem geht
> das eine oder andere ab oder?
Zeig mal die genauen Fehlermeldungen.


Gruß Oliver

von Holler (Gast)


Lesenswert?

Kannst auch mal in den SW-Application Notes von Atmel schauen. Da gibt 
es eine in Assember geschriebene SW-UART, die habe ich auf dem recht 
leistungsschwachen Tiny15L schon oft erfolgreich eingesetzt.

Wenn du den Code nicht findest und Interesse hast kann ich den hier 
posten.

von sn00py (Gast)


Lesenswert?

JA schon klar, das es Timer benötigt, ich meinte für das RX, da gibt es 
ja auch den Ansatz per Interrupt oder so zu lesen, und nicht 3 so 
schnell wie nötig, den Eingang abfragen zu müssen ...

von sn00py (Gast)


Lesenswert?

So, ich habe nun alle TIMSK1 durch TIMSK ersetzt, nun lässt sich das 
TEil kompilieren. Habe auch die Ports umgelegt auf die richtigen für den 
ATTiny2313.
Aber in der init routine steht eine Zeile drinnen, wo er hängen bleibt 
(Lasse ein Led blinken, mit der Zeile, blinkts nicht mehr, ohne der 
Zeile passt alles)

  TIMSK = 1<<ICIE1^1<<OCIE1A;    // enable tx and wait for start

an was kann das liegen?

Oder hat wer einen funktionierenden Code für den ATTiny2313?

von Purzel H. (hacky)


Lesenswert?

Mit diesem Tiny kann man vielleicht 1 Euro sparen. Waere es nicht 
einfacher einen Mega 644, welcher von Haus aus 2 Uarts hat, einzusetzen?
Ich hab sowas auch schon mal gemacht weil's um 10000er Stueckzahlen 
ging.

von sn00py (Gast)


Lesenswert?

Es geht hier um die größe des Controllers der 644 ist doch shcon riesig, 
wenn er auch lötbar bleiben sollte ...

von Achim M. (minifloat)


Lesenswert?

Schau mal im Datenblatt auf den Punkt 16.4 und insbesondere auch 16.4.1
Wenns reicht...
mfg mf

von Purzel H. (hacky)


Lesenswert?

Tja. Dann muss man da eben durch. Das Debuggen des Tiny ist ja auch 
nicht grad einfach, denn allzviele freie Pins werden's ja auch nicht 
sein. Ein neuer Ansatz waere zB den Simulator des AVR Studios zu 
verwenden. Da kann man auf Registerlevel runter zusehen was denn so 
abgeht.

von sn00py (Gast)


Lesenswert?

Hmm bei mir hat da Datenblatt kein 16.4 oder 16.4.1 da gibts prinzipiell 
keine Kapitelnummern

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Es geht mit sehr wenig Aufwand auf dem tiny:
1
        void
2
        sputc(
3
        char    c
4
        )
5
{
6
        register unsigned char i;
7
8
        outbit( 0);
9
        for ( i=1; i; i=i*2)
10
                outbit( c & i ? 1 : 0);
11
        outbit( 1);
12
        outbit( 1);
13
        _delay_us( 1000.0);
14
}
15
16
        static
17
        outbit(
18
        char    on
19
        )
20
{
21
        if ( on) PORTB |= 0x08; else PORTB &= 0xf7;
22
        _delay_us( 101.5);
23
}

Die delays habe ich mit einem 2-Kanaler experimentell ermittelt.
Vielleicht nicht die reine Lehre ... ich habe da aber auch nur
ein kleines 2-Zeilen Display dran hängen.

von sn00py (Gast)


Lesenswert?

ok danke :)

leider muß ich auch das eine oder ander Byte lesen, es ist zwar 95% 
schreiben .... aber trotzdem acuh manchmal lesen :(

von Achim M. (minifloat)


Lesenswert?

Bei mir steht da auf Seite 162:

Datenblatt schrieb:
> 16.4 Alternative USI Usage
> The flexible Design of the USI allows it for other tasks when serial
> communication is not needed. Below are some examples.
> 16.4.1 Half-Duplex Asynchronous Data Transfer
> Using the USI Data Register in three-wire mode it is also possible to
> implement a more compact and higher performance UART than by software,
> only.

mfg mf

PS: Weil der Text nicht kopierbar ist und nur Exorzismus-Zeichensalat 
erzeugt, musste ichs auch noch abtippen. Oh Mann... Aweng mitdenken, 
Atmel...

von sn00py (Gast)


Lesenswert?

Hallo :(

Kann mir wer noch einen Tipp geben wo und was ich noch schauen kann?

Irgendwie will das alles nicht, alle soft uart sind für andere 
Controller, und nach dem ich alles anpasse für den ATTiny2313, funkt es 
leider nicht mehr.

Die ATMEGA mit 2*UART sind leider zu groß, hab mir schon überlegt, ob 
ich einfach 2*ATTiny2313 nehmen soll, die dann per I2C oder so 
kommunizieren, falls das geht, aber ist ja auch nicht das gelbe vom ei 
oder?

Hat noch wer eine Idee, wie ich zu so was komme?

von Andreas B. (andreasb)


Lesenswert?

Du könntest ganz einfach selbst einen eine schreiben?

Zumindest TX ist kein Problem, RX gibt schon etwas mehr zu tun.


Hast du ein Oszilloskop? Das ist meiner Meinung nach die Voraussetzung 
um so etwas umzusetzen, habe letzte Woche nur TX für einen attiny26 
geschrieben. (Nicht besonders wiederverwendbar, nur zum Testen, könnte 
ich dir aber geben)



mfg Andreas

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Ich hab in meinem Tektronixtablet mit V-USB Projekt eine Software UART 
für den Tiny45/85. Receiver per Interrupt, Transmitter zu Fuss. Kopier 
dir raus was du brauchst:
http://www.schoeldgen.de/avr/

von miro56 (Gast)


Lesenswert?

Holler schrieb:
> Kannst auch mal in den SW-Application Notes von Atmel schauen. Da gibt
> es eine in Assember geschriebene SW-UART, die habe ich auf dem recht
> leistungsschwachen Tiny15L schon oft erfolgreich eingesetzt.
>
> Wenn du den Code nicht findest und Interesse hast kann ich den hier
> posten.

@Holler:
ich hätte gerne entweder source oder link.....

möchte gerne an zb. NANO V40 oder UNO (ATMEGA328) GPRS-datenstream aus 
UBLOX-modul (TTL-seriell) auslesen und via USB/RS232 selektiv 
weitersenden....
nur assembler, kein C oder MBASIC o. dgl.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.