Forum: Mikrocontroller und Digitale Elektronik rs232 / microcontroler


von meTTy (Gast)


Lesenswert?

hi leute,

wurde von einem anderen board weitergeletet und hoffe ihr könnt mir
bitte helfen:


ich möchte über den seriellen port einen microcontroler (tiny26)
ansprechen, nun bräuchte ich, eine art quelltext für einen rs232
converter auf dem tiny26.

(das programm läuft auf dem microcontroler)

bitte um hilfe,

liebe grüße,

_meTTy

von Stefan (Gast)


Lesenswert?

In welcher Sprache möchtest du denn programmieren?

Für C steht dazu was im AVR-GCC-Tutorial unter dem Abschnitt UART
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Der_UART

Ausserdem brauchst du noch einen weiteres Bauteil, der dir die
Umwandlung von RS232 Pegel (PC) auf TTL Pegel (ATTiny26) macht.
Üblicherweise wird dafür ein IC MAX232 verwendet.

Wie dieses IC angeschlossen wird und per Assembler angesteuert wird,
steht im UART Teil vom AVR (Assembler) Tutorial
http://www.mikrocontroller.net/tutorial/uart

Du musst allerdings die beiden Beispiele (C, Assembler) vom ATMega8 und
anderen AVRs auf den ATTiny26 umschreiben. Dabei helfen die Datenblätter
des Prozessors
http://www.atmel.com/dyn/resources/prod_documents/doc1477.pdf

Speziell im Bereich Takt, Baudratenauswahl und Registernamen besser
alles doppelt und dreifach kontrollieren ;-)

von meTTy (Gast)


Lesenswert?

wie der tiny26 programmiert wird, steht laut angaben eines kollegen
schon fest,

das problem ist nun, einen "Umwandler" zu finden der wie gesagt von
rs232 auf tiny26 umwandelt, dies ist ja bei größeren mc bereits
enthalten, nur möchte ich dies gerne software basieren lösen und ohne
ein weiteres bauteil.

liebe grüße und danke für die antwort.

meTTy

von Simon K. (simon) Benutzerseite


Lesenswert?

Das lohnt bei einem tiny26 nicht. Der Flash Speicher ist zu klein für
solche Späe (Also Software-UART).

Wenns dich dennoch interessiert: Bei atmel.com gibts ne spitzen Appnote
über Soft-Uart.

von meTTy (Gast)


Lesenswert?

könntest du mich bitte kurz über den begriff Software UART aufklären?

liebe grüße

von Stefan (Gast)


Lesenswert?

Klick auf das Wörtchen UART und eine Erklärung erscheint.

Diese UART kann in der AVR Hardware stecken (tut sie beim ATTiny26)
oder mit beliebigen I/O-Pins vom µC und entsprechender Software
emuliert werden.

Du hast nachwievor die Aufgabe die 12/-12V Pegel der RS232 auf die 0/5V
Pegel der UART (bzw. beliebiger I/O-Pins) des ATTiny26 umzusetzen und
umgekehrt, d.h. negieren und anheben.

Das Negieren kann eine Software-UART machen und manche
RS232-Schnittstellen verstehen solche Signale ohne Pegelanhebung. Aber
nicht alle.

Die sicherste Lösung ist ein dafür geeigneter IC wie der erwähnte
MAX232 mit ein paar Kondensatoren für dessen Ladungspumpe einzusetzen,
um normgerechte Signale zu erzeugen.

Es gibt andere Bastellösungen mit zwei Transistoren und vier
Widerständen zum Anheben und zum Negieren der Signalpegel. Eine ist im
Wiki-Artikel zum Pegelwandler aufgezeigt. Auch unter den Hardware-Links
zum R8C ist eine solche Minimallösung aufgezeigt.

von Stefan (Gast)


Lesenswert?

Korrektur:

Die beiden Transistorlösungen arbeiten auch mit 5V Pegeln. Die Signale
werden nur logisch negiert und so passend für die Hardware-UART
gemacht.

von meTTy (Gast)


Lesenswert?

hi!

vielen dank für die informativen antworten!

wir haben uns nun jedoch überlegt, vielleicht auf SPI umzusteigen (dies
wurde uns geraten)  haben aber bis auf die informationen von
mirkocontroller.net und einigen internet seiten nicht wirklich eine
ahnung wie das genau funktioniert.

es wäre sehr hilfreich wenn jemand weiterhelfen könnte, gibt es
vielleicht programmierbeispiele oder ähnliches?

liebe grüße,
meTTy

von Santa (Gast)


Lesenswert?


von TravelRec. (Gast)


Lesenswert?

>>Diese UART kann in der AVR Hardware stecken (tut sie beim ATTiny26)
>>oder mit beliebigen I/O-Pins vom µC und entsprechender Software
>>emuliert werden.

Tut sie eben nicht. Der Tiny26 hat kein internes Hrdware-USART. Deshalb
fragte der Autor sicherlich nach einer Softwarelösung. Ich würde an
dieser Stelle vielleicht umdenken und einen ATMEGA8 oder einen seiner
Nachfolger einsetzen, der sowohl USART als auch A/D-Converter bietet.
Ein USART im kleinen Tiny26 per Software nachzubilden, ist schon etwas
sehr Ressourcen-killend.

von inoffizieller WM-Rahul (Gast)


Lesenswert?

AVR307: Half Duplex UART Using the USI Module:
http://www.atmel.com/dyn/resources/prod_documents/doc4300.pdf

von Simon K. (simon) Benutzerseite


Lesenswert?

@inoffizieller WM-Rahul: Selbst das ist noch eine Software UART.. Wenn
du darauf hinaus willst.

PS: Das ist die AppNote die ich meinte übrigens.

von Peter D. (peda)


Lesenswert?

@TravelRec.,

"Ein USART im kleinen Tiny26 per Software nachzubilden, ist schon
etwas
sehr Ressourcen-killend."


So schlimm ist das garnicht (siehe Codesammlung).
O.k., der Tiny26 hat keinen capture, da nimmt man eben nen externen
Interrupt und gut is.



@meTTy

"von rs232 auf tiny26 umwandelt, dies ist ja bei größeren mc bereits
enthalten"

Wäre mir total neu !
Einen MC mit integrierten RS-232 Pegelwandler habe ich noch nirgends
gesehen.
Der MAX202 wird da gerne genommen oder irgendne diskrete
Sparschaltung.

SPI geht nur bei MC-MC Verbindung, ein PC hat keine SPI.
Und über USB gehts nur RS-232.


Peter

von Thilo (Gast)


Lesenswert?

Die Code-Sparsamste Lösung ist immer noch wie oben schon gesagt die USI.
Nebenbei: Der Tiny26 wurde für Sensor-Anschaltung konzipiert
('dezentrale Peripherie'), daher die umfangreiche
AD-Wandlerausstattung. Für komplexe Programme ist er nicht gedacht. Die
USI ist nix weiter als ein programmierbares Schieberegister.

von Alex (Gast)


Lesenswert?

Hallo,

ich bin gerade dabei die oben erwähnte AppNote von Atmel in mein Projekt 
einzubinden.
Ich verwende ebenfalls einen Tiny26, AVR Studio und den gcc Compiler.
Leider wurde der Code der AppNote mit dem Compiler "IAR EWAVR 2.28A" 
getestet.
Hier der Link zu dem AppNote Quellcode:
http://www.atmel.com/dyn/resources/prod_documents/AVR307.zip

Mein Problem ist nun, dass der gcc die includes nicht finden kann.
(#include <iotiny26.h> und #include <inavr.h>)

Daraufhin habe ich sie durch #include <avr/io.h> ersetzt, allerdings 
bekomme ich dann folgende Fehlermeldungen:


../USI_UART.c:67: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before '__regvar'
../USI_UART.c:67: error: stray '@' in program
../USI_UART.c: In function 'USI_UART_Initialise_Transmitter':
../USI_UART.c:117: warning: implicit declaration of function 
'__disable_interrupt'
../USI_UART.c:118: error: 'TCNT0' undeclared (first use in this 
function)
../USI_UART.c:118: error: (Each undeclared identifier is reported only 
once
../USI_UART.c:118: error: for each function it appears in.)
../USI_UART.c:119: error: 'TCCR0' undeclared (first use in this 
function)
../USI_UART.c:135: warning: implicit declaration of function 
'__enable_interrupt'
../USI_UART.c: At top level:
../USI_UART.c:190: warning: ignoring #pragma vector
../USI_UART.c:191: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before 'void'
../USI_UART.c:216: warning: ignoring #pragma vector
../USI_UART.c:217: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before 'void'
../USI_UART.c:291: warning: ignoring #pragma vector
../USI_UART.c:292: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before 'void'
make: *** [USI_UART.o] Error 1
Build failed with 9 errors and 5 warnings...


Hat jemand die original verwendeten Headers, oder kann mir helfen die 
Fehler loszuwerden?

Vielen Dank schonmal,
Alex

von Alex (Gast)


Lesenswert?

ok.. hab weiter gelesen..
ich muss den code wohl auf gcc portieren :(

naja.. hilft ja nix

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.