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
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 ;-)
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
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.
könntest du mich bitte kurz über den begriff Software UART aufklären? liebe grüße
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.
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.
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
http://www.mikrocontroller.net/mc-project/Pages/AVR/SPI/spi.html Quelle: http://www.mikrocontroller.net/mc-project/ Gruß S.
>>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.
AVR307: Half Duplex UART Using the USI Module: http://www.atmel.com/dyn/resources/prod_documents/doc4300.pdf
@inoffizieller WM-Rahul: Selbst das ist noch eine Software UART.. Wenn du darauf hinaus willst. PS: Das ist die AppNote die ich meinte übrigens.
@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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.