Forum: Mikrocontroller und Digitale Elektronik Wie Baudrate einstellen


von Bastelphilipp (Gast)


Lesenswert?

Hallo,
ich programmier mit einem ATtiny25.
Jetzt habe ich doch noch einen Pin freischaufeln können und möchte dort 
eine nur einseitige RS232 Verbindung vom ATtiny zum PC mit 19200 Baud 
machen.
Ich will mit Hyperterminal mitlesen können was der Attiny so grade 
macht.

1. Wie kann ich in C Meßwerte über RS232 ausgeben?
2. Wie kann ich die Baudrate einstellen.
3. Ich habe keinen Quarz angeschlossen, ist die Taktrate überhaupt 
stabil genug so?

von Klaus W. (mfgkw)


Lesenswert?

Bastelphilipp schrieb:
> 1. Wie kann ich in C Meßwerte über RS232 ausgeben?

Tutorial, Datenblatt

> 2. Wie kann ich die Baudrate einstellen.

Tutorial, Datenblatt

> 3. Ich habe keinen Quarz angeschlossen, ist die Taktrate überhaupt
> stabil genug so?

Nur wenn du Glück hast und darauf baust, daß es so bleibt..

von Steffen B. (flite)


Lesenswert?

Bitteschön:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Der_UART

Hier sollten all deine Fragen beantwortet werden.
Mit Quarz wäre die Übertragung sicherer, aber fürs Debugging wird die 
interne Taktquelle schon ausreichen.

von Peter (Gast)


Lesenswert?

Auf all Deine Fragen findest Du hier im Forum reichlich antworten...

von Karl H. (kbuchegg)


Lesenswert?

Da der Tiny25 keine UART hat, sondern nur eine USI musst du dir hier 
selber helfen.

Entweder die USI so umpfriemeln, dass sie als UART funktioniert oder 
aber eine Software UART implementieren.

Da du wahrscheinlich den USI Pin sowieso nicht frei haben wirst, wird es 
wohl auf eine Software UART hinauslaufen. Code dafür findet sich in der 
Codesammlung.

von Bastelphilipp (Gast)


Lesenswert?

Ich hatte gehofft, das es
1. eine set_baudrate(unsigned long int);
2. eine putchar(unsigned char); Routine geben würde.

> Da du wahrscheinlich den USI Pin sowieso nicht frei haben wirst, wird es
> wohl auf eine Software UART hinauslaufen.
Welches ist der USI-Pin? Im Pinout des ATtiny auf Seite 2 steht nix von 
USI


> Code dafür findet sich in der Codesammlung.
Wo genau? Genausogut könntest du sagen: Info's über Mikrocontroller 
finden sich in jeder Stadtbibliothek  ;-)

von Karl H. (kbuchegg)


Lesenswert?

Bastelphilipp schrieb:
> Ich hatte gehofft, das es
> 1. eine set_baudrate(unsigned long int);
> 2. eine putchar(unsigned char); Routine geben würde.

:-)
Ich hoffe auch viel.
Aber Hoffnungen sind manchmal trügerisch

>> Da du wahrscheinlich den USI Pin sowieso nicht frei haben wirst, wird es
>> wohl auf eine Software UART hinauslaufen.
> Welches ist der USI-Pin? Im Pinout des ATtiny auf Seite 2 steht nix von
> USI

Datenblatt, Abschnitt über USI

>> Code dafür findet sich in der Codesammlung.
> Wo genau? Genausogut könntest du sagen: Info's über Mikrocontroller
> finden sich in jeder Stadtbibliothek  ;-)

Und genauso wie jede Stadtbibliothek hat auch die Codesammlung eine 
Suchfunktion. Was hindert dich daran, dort "Software UART" einzugeben?

von Bastelphilipp (Gast)


Lesenswert?

Hallo,
ich habe früher mal diese Rotine in Assembler programmiert.
Dies ist sozusagen meine eigene Soft_UART-Routine
1
RS232_putchar:  
2
    clc                      ;Startbit
3
    PUSH  Loopcounter
4
    ldi    Loopcounter,10    ;Startbit + 8 bit + Stopbit
5
Send_loop:
6
    brcs  nicht_null_1      
7
    cbi     PORTB,RS232_Port
8
nicht_null_1:
9
    brcc  nicht_eins_1      
10
    sbi     PORTB,RS232_Port
11
nicht_eins_1:        
12
    PUSH  Loopcounter
13
    ldi    Loopcounter,18    ;18 für 115200 Baud
14
wait_loop:
15
    dec    Loopcounter      
16
    brne  wait_loop      
17
    POP    Loopcounter      
18
    sec              
19
    ror    ACC          
20
    dec    Loopcounter      
21
    brne  Send_loop      
22
    POP    Loopcounter
23
    ret
Ein Zeichen wird über RS232 mit 115200 Baud ausgeben.
Das zu übergebende Zeichen ist in der Variablen ACC
In der Routine ist eine Variable Loopcounter verwendet.
Wie könnte ich das in C mit dem Inlineassembler einbinden?

von Bastelphilipp (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Und genauso wie jede Stadtbibliothek hat auch die Codesammlung eine
> Suchfunktion. Was hindert dich daran, dort "Software UART" einzugeben?

So, das habe ich getan und habe diese Software UART vom peter dannegger 
gefunden.

Diese scheint aber für irgendein ATmega-Modell zu sein, dies sollte 
eigentlich + die Info welcher Compiler, welche IDE, welche 
Optimierungs-Optionen eingeschaltet werden, etc. im Quelltext enthalten 
sein.

Bei mir(GCC + AVRstudio4) gibt's nur 1000 Fehlermeldungen...

von Karl H. (kbuchegg)


Lesenswert?

Bastelphilipp schrieb:
> Karl heinz Buchegger schrieb:
>> Und genauso wie jede Stadtbibliothek hat auch die Codesammlung eine
>> Suchfunktion. Was hindert dich daran, dort "Software UART" einzugeben?
>
> So, das habe ich getan und habe diese Software UART vom peter dannegger
> gefunden.
>
> Diese scheint aber für irgendein ATmega-Modell zu sein, dies sollte
> eigentlich + die Info welcher Compiler,

Compiler ist sicherlich der WinAvr, wenn auch eine etwas ältere Version. 
Das wird sich aber nicht um viel reißen

> welche IDE,

AVR-Studio (ziemlich sicher. >80% des Codes hier stammt aus dem Gespann 
AVR-Studio / WinAVR)

> welche
> Optimierungs-Optionen eingeschaltet werden

ist praktisch auch immer gleich: -Os

> Bei mir(GCC + AVRstudio4) gibt's nur 1000 Fehlermeldungen...

Dann fang mit der ersten an.

Was ist das Prinzip des Codes? Welche Hardware vom Mega braucht er? Hast 
du die Hardware oder etwas ähnliches (zb Timer) auf deinem Tiny? Wenn 
ja, wie ist die Konfiguration beim Mega, wie muss das am Tiny aussehen?

Ist alles Standard-Arbeit bei der Code Übernahme auf einen anderen 
Prozessor.

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.