mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART Frage betreffs startbit stopbit etc.


Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
ich habe mal ne Frage ich möchte eine Verbindung zwichen meinem Atmega 
und meinem taschenrechner herstellen. Ich hätte dazu zwei Fragen:

1. Ich brauche: 1 startbit, 8 databits, no parity, 2 stopbits, 9600 baud


wie stell ich das ein Ich weis nur wie das mit der Baudrate geht.

2. ich muss z.B. laut protokoll 13h senden was kann damit gemeint sein?

nur 13 13 und h oder steht das h für hexa also 19?


hier der Link dazu:

http://users.pandora.be/gp/casio/

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Einstellungen nimmst Du im UART-Modul vor. Siehe Datenblatt 
ATMEGAxxx.
Dort sind Beispiele in Assembler und C abgedruckt.
13h heißt 13 hexadezimal, was dezimal der 19 entspricht, richtig!

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich habe mir das datenblatt mal durchgelesen...aber so richtig 
verstehe ich das nicht.

Autor: Chrisi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist da nicht sogar ein Beipiel im Datenblatt? Jetzt reiss Dich mal 
zusammen :-)

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ao richtig vertanden was was bewirkt habe ich noch nicht.,..aber ist das 
richtig.


ldi r16, (1<<URSEL)|(1<<USBS)|(3<<UCSZ0)
out UCSRC,r16

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Florentin,

hier steht es mit Beispielen:

http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART

"10" und  "13" sind nicht in hex - es ist dezimal, wobei
"10" = LF (line feed - Zeilenvorschub) und
"13" = CR (carriage return - Wagenrücklauf)

Gruss Otto

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Florentin Schirmer (tuxianer)


>wie stell ich das ein Ich weis nur wie das mit der Baudrate geht.

Steuerregister des USART.

>2. ich muss z.B. laut protokoll 13h senden was kann damit gemeint sein?

Bit du sicher, dass du mit dem AVR umgehen kannst, wen du schon über 13h 
stolperst?

13h heisst 13 in hexadezinaler Darstellung. 0x13 oder $13, dezimal 19

>nur 13 13 und h oder steht das h für hexa also 19?

ja.

MfG
Falk

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein, nicht hex:

        rcall serout
        ldi temp, 10
        rcall serout
        ldi temp, 13


Gruss Otto

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also mit dem 0x13 ist klar das hatte cih auch so gemacht, ich wollt mich 
nur nochmal versichern ich habe mich vlt blöd ausgedrückt. Leider 
funktioniert mein programm nicht so wie es soll...zumindestens gehen 
keine Dioden an und auf dem Re4chner bekomme ich ein error...
 
.include "m32def.inc"                    ; bzw. 2333def.inc
 
.def temp = R16
.def RX = R17
.def TX = R18
.equ CLOCK = 16000000
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1
 
.org 0x00
        rjmp main
 
.org URXCaddr                             ; Interruptvektor für UART-Empfang
        rjmp int_rxc
 
; Hauptprogramm
main:
        ldi temp, LOW(RAMEND)
        out SPL, temp
        ldi temp, HIGH(RAMEND)
        out SPH, temp

    ldi temp, 0xFF                    ; Port D = Ausgang
        out DDRD, temp

    ldi temp, 0xFF
    out PortD, temp
 
        ; Baudrate einstellen
        ldi temp, HIGH(UBRRVAL)
        out UBRRH, temp
        ldi temp, LOW(UBRRVAL)
        out UBRRL, temp
 
        ; Frame-Format: 8 Bit
    ldi r16, (1<<URSEL)|(1<<USBS)|(3<<UCSZ0)
        out UCSRC, temp
 
        sbi UCSRB, RXCIE                  ; Interrupt bei Empfang
        sbi UCSRB, RXEN                   ; RX (Empfang) aktivieren
    sbi UCSRB, TXEN            ; TX (Senden) aktivieren 
        
        sei                               ; Interrupts global aktivieren
        
loop:   rjmp loop                         ; Endlosschleife
 
; Interruptroutine: wird ausgeführt sobald ein Byte über das UART empfangen wurde
int_rxc:
        push temp                         ; temp auf dem Stack sichern
    cbi  PORTD, 5 
    in RX, UDR                ; Empfangenes Byte in RX speichern

    cpi  RX,0x16
    
      breq Transmit

    pop temp                          ; temp wiederherstellenerrupt beenden
        reti                              ; Int
        


Transmit:

        ldi TX, 0x13
    sbis UCSRA,UDRE                   ; Warten bis UDR für das nächste Byte bereit ist
    rjmp Transmit
        out UDR, TX
    cbi  PORTD, 6
        reti                              ; zurück zum Hauptprogramm 

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
breq Transmit

    pop temp                          ; temp wiederherstellenerrupt 
beenden
    reti                              ; Int

Transmit:

    ldi TX, 0x13
    sbis UCSRA,UDRE                   ; Warten bis UDR für das nächste

    rjmp Transmit
    out UDR, TX
    cbi  PORTD, 6
    reti                              ; zurück zum Hauptprogramm


das funktioniert nicht, weil Du am Ende von Transmit
kein "pop" ausführst.....

Otto

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was kann da falsch sein...beim assembolieren bekomme ich keinen Error 
aber wenn ich den Simulator starte kommt das.


AVR Simulator: Invalid opcode 0xffff at address 0x003802
AVR Simulator: Invalid opcode 0xffff at address 0x003804
AVR Simulator: Invalid opcode 0xffff at address 0x003806

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so...ich habegerade gemerkt aus TX kommt dauerhaft strom ist das 
normal???


ich dachte es liegt daran das habe ich mal geändert.


    ldi temp, 0b01100000
    out PortD, temp

aber es kommt immer noch strom...


so es geht jetzt bis zur ersten LED allerdings wenn ich die LED nach 
erfolgreichen Vergleich schlate gehts nicht...

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und der Fehler kommt immer noch...

AVR Simulator: Invalid opcode 0xffff at address 0x000004
AVR Simulator: Invalid opcode 0xffff at address 0x000004
AVR Simulator: Invalid opcode 0xffff at address 0x000004
AVR Simulator: Invalid opcode 0xffff at address 0x000004
AVR Simulator: Invalid opcode 0xffff at address 0x000004

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> so es geht jetzt bis zur ersten LED allerdings wenn ich die LED nach
> erfolgreichen Vergleich schalte gehts nicht...

zeig mal den Code...

Otto

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.include "m32def.inc"                    ; bzw. 2333def.inc
 
.def temp = R16
.def RX = R17
.def TX = R18
.equ CLOCK = 16000000
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1
 
.org 0x00
        rjmp main
 
.org URXCaddr                             ; Interruptvektor für UART-Empfang
        rjmp int_rxc


;Hauptprogramm
main:
        ldi temp, LOW(RAMEND)
        out SPL, temp
        ldi temp, HIGH(RAMEND)
        out SPH, temp

        ldi temp, 0xFF                    ; Port D = Ausgang
        out DDRD, temp

        ldi temp, 0b01100000
        out PortD, temp
 
        ; Baudrate einstellen
        ldi temp, HIGH(UBRRVAL)
        out UBRRH, temp
        ldi temp, LOW(UBRRVAL)
        out UBRRL, temp
 
        ; Frame-Format: 8 Bit
        ldi r16, (1<<URSEL)|(1<<USBS)|(3<<UCSZ0)
        out UCSRC, temp
 
        sbi UCSRB, RXCIE                  ; Interrupt bei Empfang
        sbi UCSRB, RXEN                   ; RX (Empfang) aktivieren
        sbi UCSRB, TXEN        ; TX (Senden) aktivieren 
        
        sei                               ; Interrupts global aktivieren
        
loop:   rjmp loop                         ; Endlosschleife
 
; Interruptroutine: wird ausgeführt sobald ein Byte über das UART empfangen wurde
int_rxc:
    
       push temp                        ; temp auf dem Stack sichern
    
       cbi  PORTD, 5
       in RX, UDR             ;Empfangenes Byte in RX speichern

       cpi  RX,0x16
    
       breq Transmit

       pop temp                          ; temp wiederherstellenerrupt beenden
      reti                              ; Int
        


Transmit:
       cbi  PORTD, 6
       ldi TX, 0x13
       sbis UCSRA,UDRE                   ; Warten bis UDR für das nächste Byte bereit ist
       rjmp Transmit
       out UDR, TX
    
       reti                              ; zurück zum Hauptprogramm 

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. das funktioniert so nicht, weil Du am Ende von Transmit
kein "pop" ausführst..... SIEHE OBEN !

2. Wo hängen denn wie viel LED dran und ist ein Transistor dazwischen ?

Otto

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also daran kanns ja nicht liegen mit dem Pop aber danke für den 
hinweis...temp wird ja eh nirgendwo anders verwendet...und ich habe 2 
Dioden über widerstand zu Ground an Portd 5 und 6


Ps.: im Moment leuchtet Diode 1 nur wenn ich die TX Leitung abklemme

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>also daran kanns ja nicht liegen mit dem Pop aber danke für den

Ich glaube es hackt ! Zu JEDEM PUSH gehört genau ein POP.
Egal wo, aber es muss getan werden. Sonst läuft dir der Stack über !

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry das wusst ich noch nicht...und jetzt geht auch die Diode mal 
wieder, wenn TX drann ist...

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Florentin,

weshalb fragst Du überhaupt, wenn Du alles weißt ?

Gruß Otto

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es tut mir wie gesagt leid davon habe ich als Anfänger noch nix gehört 
ich habe die ganzen Push und pops mal weg gemacht aber es geht leider 
immer noch nicht weiter als bis zu LED1

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du mußt auch bei erfolgreichem Vergleich das Temp-Register wieder pop'en
Und so ist schöner:
int_rxc:
       push temp                ; temp auf dem Stack sichern
    
       cbi  PORTD, 5
       in RX, UDR               ;Empfangenes Byte in RX speichern
       cpi  RX, 0x16
       brne ende

       cbi  PORTD, 6
       ldi TX, 0x13
Transmit:
       sbis UCSRA, UDRE         ; Warten bis UDR ist
       rjmp Transmit
       out UDR, TX
ende:
       pop temp                 ; temp wiederherstellen
       reti                     ; zurück zum Hauptprogramm 
Allerdings brauchst du nur die Register zu pushen, die du auch benutzt 
;)

hth. Jörg

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Florentin,

es kann auch nicht weitergehen, da Du die LED's nur einmal aus- aber nie 
wieder einschaltest...


       cbi  PORTD, 5
       cbi  PORTD, 6

Otto

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Otto,
hetz nicht so ;-) Immer schön ein Schritt nach dem anderen.

scnr Jörg

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg - ist ja gut... :-) Otto

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt bin ich etwas verwirt...


schalte ich sie nicht hier aus:


ldi temp, 0b01100000
out PortD, temp


und mit

cbi  PORTD, 5
cbi  PORTD, 6

jeweils ein oder verdrehe ich da was...

Ps: Jörgs variante geht leider auch nicht.

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also es hängt definitiv am Vergleich...es Springt direkt zu Ende...

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier schaltest Du sie ein (wenn sie vom Port gegen Masse liegen):

ldi temp, 0b01100000
out PortD, temp

bloß da kommst Du NIE wieder hin....

erst beim nächsten RESET

Otto

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>erst beim nächsten RESET

Soll er halt den Watchdog aktivieren ;)

Nee, mach das bloß nicht !

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe mich blöd ausgedrückt...es ist genau anders herum: 
Controller-->Widerstand-->Diode-->VCC

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es wird nur dann nicht gesprungen wenn 0x16 empfangen wird (das ist kein 
druckbares ASCII zeichen, btw) und um den Empfang zu simulieren 
müsstest du Stimuli-Files benutzen (dabei kann ich dir nicht helfen) 
oder nach dem "in RX, UDR" das Register RX mit 0x16 von Hand 
beschreiben.
Wenn du direkt mit dem AVR "redest" solltest du vielleicht 0x16 in ein 
druckbares zeichen ändern, z.B. 'A' (MIT ' in den Code schreiben)

hth. Jörg

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also wie gesagt so genau weis ich nicht wie der rechner arbeitet...ich 
habe leider nur den Link:


http://users.pandora.be/gp/casio/


mit Druckbaren zeichen ist leider auch schlecht die 22 ist ein Syn oder 
so ähnlich...

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einfach geht es erst mal so:

loop:   ldi temp, 0b01100000   ; LED aus
        out PortD, temp        ;
        rjmp loop              ; Endlosschleife

int_rxc:
       push temp                ; temp auf dem Stack sichern

       cbi  PORTD, 5
       in RX, UDR               ;Empfangenes Byte in RX speichern
       cpi  RX, 0x16
       brne ende

       cbi  PORTD, 6
       ldi TX, 0x13
Transmit:
       sbis UCSRA, UDRE         ; Warten bis UDR ist
       rjmp Transmit
       out UDR, TX
ende:
       pop temp                 ; temp wiederherstellen
       reti                     ; zurück zum Hauptprogramm

Otto

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit den zeilen geht es nich ohne geht es bis zur ersten LED.

  ldi temp, 0b01100000   ; LED aus
  out PortD, temp        ;

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte etwas genauer:

1. die LED werden ausgeschaltet

2. bei Empfang irgendeines Zeichens geht LED 1 an

3. bei Empfang "0x16" LED 2 - aber "0x16" kannst Du wahrscheinlich nicht 
senden.

Versuche, den AVR an den PC anzuschliessen und arbeite z. B. mit 
Hyperterminal, bis alles läuft.

Dann kannst Du, wie Joerg riet, auf 'A' abfragen und siehst 
anschliessend auch das "13" (CR)

Otto

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also hexa abfragen muss gehen...her hat mal jemand etwas änliches für 
den gleichen rechner gemacht:


http://www.mikrocontroller.net/attachment/7211/casio.asm

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich seh gerade da ist das auhc anders:

(1<<URSEL0)|(1<<USBS0)|(1<<UCSZ01)|(1<<UCSZ00)

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, kann schon sein, aber Deinen Casio kenne ich leider nicht....

Otto

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"hex abfragen" geht natürlich beim AVR - die Frage ist, ob Du das 
Zeichen senden kannst.

Anders ist die Anzahl der Stoppbits:

; Set frame format: 8data, 2stop bit
ldi r16, (1<<URSEL)|(1<<USBS)|(3<<UCSZ0)

Gruß Otto

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>(3<<UCSZ0)

Das tut weh :(

Autor: Condi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das kann nicht gehen. Der Rechner will immer einen kompletten Block 
haben mit Checksumme usw. Du sendest nur 1 byte und dann nix mehr. -> 
Error

Dann läuft das Programm auch sehr schnell, da wirst du keine LED An/Aus 
erkennen. Wenn doch, dann stimmt was nicht mit der Clockrate oder so.
Nicht stören lassen, der Taschenrechner kommt mit 1 und 2 Stoppbits 
zurecht.

Condi

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also zum Senden komm ich ja garnicht...wenn ich eine LED nach den 
Vergleich setzte springt diese nicht an. Die Cehcksum kommt erst im 
Header soweit bin ich leider noch nicht. Und wie muss die Einstellung 
nun lauten für die Stopbits?

die LED wird ja angeschalten wenns klappt und leibt dann an! Siehe die 
erste.

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beschreib mal deinen Aufbau: Was ist womit verbunden (v.A. der USART)?, 
Wo/Wie sind die LEDs angeschlossen?
Wenn dein Atmega auf bestimmte Zeichen reagieren soll: wo kommen diese 
Zeichen her (Taschenrechner, PC...)?

Indem Beispielcode den du (ganz weit) oben verlinkt hast, wird ein 
Atmega162 verwendet, der hat 2 USART: einer ist mit dem PC verbunden, 
der andere mit dem Taschenrechner. Deshalb komm ich auf die Frage: Was 
hast du eigentlich vor?

hth. Jörg

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also das hatte ich eigentlich alles schon beschrieben...ist leider etwas 
verstreut deshalb nochmal:

ich will vom GTR Variablen ec. an den Controller senden.

Der ist via Kabel an den RX und TX Port verkabelt PortD0 und 1.

Die Leds hängen nach folgendem Schema an PortD 5/6:


Controller-->Widerstand-->-Diode+-->VCC

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So wie ich das sehe, hast du 2 Baustellen.
Die eine die UART am AVR, die andere das Protokoll welches
du einhalten musst um mit dem Casio zu kommunizieren.
Das ist nicht gut, weil du nie weist, wo denn ein Fehler
liegt.

Ich würde mal hergehen und eine Baustelle stilllegen:
An den AVR einen MAX232 anschliessen und damit eine
serielle Verbindung zum PC aufbauen. Am PC läuft dann
ein einfaches Terminalprogramm, welches alles was von
der Seriellen kommt mitprotokolliert. Dadurch hast du
schon mal das Casio-Protokoll Problem weg und kannst dich
nur auf die UART am AVR konzentrieren.

Läuft die dann irgendwann, dann gehts wieder zurück auf die
Casio Schnittstelle und das Protokoll ist drann.

Das andere:
Wenn ich mir deinen Assembler-Code und das daraufhin
gezeigte Verständnis so ansehe, wäre vielleicht eine
Programmierung in C nicht das schlechteste.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, aber dann hat er noch eine Baustelle mehr !

Da ist einfach etwas Zeit erforderlich um sich einzuarbeiten - und ich 
persönlich halte assembler für sehr sinnvoll um die Hardware erst mal 
kennenzulernen. C vielleicht dann mal später.

@ Florentin: Also nicht aufgeben - notfalls erst mal ein einfacheres 
Thema angehen !!!

Gruß
Stefan

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein der tip ist nicht schlecht die Teile habe ich auch da...das werde 
ich mal probieren...und wenn ich via terminal 0x16 sende sehe ich ja ob 
0x13 zurückkommt. Und so komplex fidne ich das Thema garnicht ich halte 
es für eine gute Übung.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan wrote:
> Sorry, aber dann hat er noch eine Baustelle mehr !

Einen Max232 anschliessen ist aber keine Raktentechnik.
Das wär mir auf jeden Fall lieber als mit einem Gerät
zu kommunizieren, welches ein bestimmtes Protokoll
erwartet und ich nicht weiss ob meine UART grundsätzlich
funktioniert oder ob ich im Protokoll einen Fehler hab.

Die Hilfs-Baustelle Mega - MAX232 - Kabel - PC - Hyperterminal
ist in 20 Minuten befahrbar und: da kann eigentlich nicht
viel schief gehen (ausser der ewigen Frage: Modem oder Nullmodem-
Kabel). Wenn die UART an dieser Baustelle nicht funktioniert,
dann wird sie auch an der Casio Baustelle nicht funktionieren.
Umgekehrt: Wenn die PC Baustelle funktioniert, dann hab ich
bei einem Casio-Baustellenproblem schon mal eine Fehlerquelle
weniger.

Und: Im Schlimmsten Fall hat man damit auf dem PC mit HTerm ein
mächtiges Werkzeug um sich anzusehen, was denn der AVR/Casio
nun wirklich sendet und kann dann am PC auch mal die Gegenstelle
vorgaukeln.

Aber: Jeder wie er mag.

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich bin der gleichen Meinung...ich werde mir da am besten ne Lochradter 
holen und nen Max gleic auflöten mit elkos! Und Man braucht ein 
Modemkabel oder?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florentin Schirmer wrote:
> ich bin der gleichen Meinung...ich werde mir da am besten ne Lochradter
> holen und nen Max gleic auflöten mit elkos! Und Man braucht ein
> Modemkabel oder?

Kommt drauf an, wie du die Signale vom MAX auf deine RS232
Stecker/Buchse legst.

Hier ist das beschrieben:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie die richtige Stopbit einstellung ist weis ich übrigens immer noch 
nicht...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stoppbit ist nur für den Sender interessant.
Mit Stoppbits wird im Grunde eine kleine Pause
zwischen den einzelnen Bytes eingelegt, sodass der
Empfänger eine kleine 'Verschnaufpause' kriegt.
Wenn du 2 einstellst bist du daher auf jeden Fall
auf der sicheren Seite.

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so ich hattes am PC...wenn ich 16h sende geht die 2. LED an! empfangen 
ahbe ich aber glaube noch nix...

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so...also es empfängt doch 13h!!!

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
super es geht jetz!!!

ich glaube ich ahtte doch was an den Startbits oder so verkehrt keine 
Ahnung...

Autor: Condi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also der Mega162 wurde gewählt da 2 Taschenrechner sich in einem 
Programm nicht direkt unterhalten können. Er dient so als Puffer und 
Umsetzer.

Und nochmals, auf dem Rechner kommt immer ein Error wenn du nicht den 
Start und Stop Header sendest. Es ist dabei vollkommen egal ob du ein 
Programm, Matrix oder nur eine Variable sendest.


In der main loop von otto werden die LED's ausgeschalten. Nun kommt ein 
Zeichen und der geht in den interrupt. Da wird die LED 1 eingeschalten.
Wenn keine 0x16 empfangen wurde, geht der wieder ind die Main und die 
LED's gehen aus. Wurde 0x16 empfangen, setzt er die LED 2 auf ein sendet 
und geht in die Main wo die LED's ausgeschalten werden. Das geht so 
schnell, da kann man höchstens ein sehr kurzes flackern sehen. Bleiben 
die LED's an, dann läuft der Stack über oder das UDR wird nie leer.... 
oder du hast nen komplett anderen Code.

Condi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.