Forum: Mikrocontroller und Digitale Elektronik UART des AT90S2333


von Stefan S. (Gast)


Lesenswert?

Ich möchte via PC an meinen Mikrocontroller Daten senden und diese mit 
LEDs am Mikrocontroller darstellen.
Damit die serielle Schnittstelle des PC mit dem µC arbeitet, werwende 
ich einen MAX232 Pegelwandler.
Die Hardware ist auch vollständig in Ordnung, denn ich habe schon vom µC 
an den PC Daten gesendet und mit HyperTerminal ausgelesen.

Ich habe bei der Codesammlung ein Programm dazu gefunden und es 
abgeändert:

_________________________________________________________

.include "2333def.inc"

.def temp = r16


.cseg
.org $000
rjmp start ;reset handle
.cseg
.org $00B
rjmp rx_com ;RX-Complete - Rotine


rx_com:
in temp,udr ;read value
out PORTB,temp

reti


start:
ldi temp,LOW(RAMEND) ;LOW-Byte der obersten RAM-Adresse
out SPL,temp
sbi UCSRB,RXEN ;RX aktivieren
sbi UCSRB,RXCIE ;RX-Complete aktivieren
ldi temp,4912500/(9600*16)-1 ;Baudrate 9600 einstellen (bei 4,9125MHz)
out UBRR,temp

ldi temp,0xFF ;0xFF ins Arbeitsregister r16 laden
out DDRB,temp ;Inhalt von r16 ins IO-Register DDRC ausgeben

sei ;Interrups einschalten

loop:

rjmp loop

_________________________________________________________


Wenn ich bei HyperTerminal auf "Übertragung --> Textdatei senden" gehe 
und eine Datei auswähle, dann müsste ich doch eigentlich die LEDs am 
Mikrocontroller falckern sehen, oder doch nicht??

Und wie kann ich einzelne Bits mit dem PC an den µC übertragen? Geht das 
überhaupt mit HyperTerminal oder sehe ich das ganz falsch?

Wäre nett, wenn mal jemand meinen Code überprüfen könnte und mir sagen 
kann, ob ich falsch liege oder nicht!

Danke im Voraus!

Gruß
Stefan

------------------------------------
http://www.elektroniktreff.de

von Niki Hammler (Gast)


Lesenswert?

1.) genau vor diesem Problem stehe ich auch...die serielle Kommunikation 
funktioniert einfach nicht wie sie soll....
2.) wenns die richtigen infos enthält und die übertragung nicht zu 
schnell is, was ich allerdings bezweifle
3.) Bezüglich den Bits:
Entweder ein kleines C Programm schreiben das binäre Sachen in eine 
Datei schreibt oder mit einem hex Editor eine bestehende ändern oder was 
weiss ich. Jedenfalls musst du es so machen:
12345678

Das ist dein Byte, jedes davon repräsentiert also ein LED...also die 
"Maske" (mühevoll) füllen, Rest mit Null auffüllen und binär in den 
Windows Rechner eingeben und nach HEX umwandeln.
Jetzt schreibst du halt in eine Textdatei genau ein Zeichen, die Datei 
sollte dann logischerweise 1 byte gross sein (keine Umbrüche sonst sinds 
3). Die bearbeitest mit einem x beliebigen HEX Editor und änderst das 
Byte in dein HEX Zeichen. Dann sollte es funktionieren, abgesehen von 
deinem Code oberhalb weil bezüglich AVR hab ich selbst noch nicht so 
viel Ahnung

von Andreas (Gast)


Lesenswert?

Hallo,

der RX-Complete-Interruptvektor liegt beim AT90S2333 nicht auf 0x0B, 
siehe Datenblatt.
Und wenn du schon beim datenblattlesen bist, schau gleich noch nach ob 
du die Bits für die UART-Konfiguration im richtigen Register gesetzt 
hast.

MfG
Andreas

von Stefan S. (Gast)


Lesenswert?

Ach ja, das hab ich ja völlig übersehen. Gleich mal probieren, ob es 
dann geht.

Vielen Dank für die Antworten!

Gruß
Stefan

von Stefan S. (Gast)


Lesenswert?

Es lag am RX-Complete-Interruptvektor, jetzt geht es.


Gruß
Stefan

von Thomas_D (Gast)


Lesenswert?

Wo es gerade um die Interruptvektoren in den Datenblättern geht: Man 
sollte sich nicht immer darauf verlassen, was dort drin steht. Als ich 
mal eine Uhr mit Hilfe des asynchronen Timers 2 des mega163 gebaut habe, 
mußte ich nach langem Suchen feststellen, dass die 
Overflow-Interrupt-Adresse von Timer2 mit der von Timer1 im Datenblatt 
vertauscht ist.

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.