Forum: Compiler & IDEs Anfänger - Übertragung von 1 bis 255 von PC und Atmega8


von Henri G. (hene42)


Lesenswert?

Hallo,
ich beschäftige mich jetzt seit ca. 2 Wochen mit dem Mikrocontroller
Atmega8. Ich möchte mir gern selber eine 8-Kanal Relaiskarten bauen.
Ich bin bis jetzt sehr weit gekommen bleibe jedoch seit einer gewissen 
Zeit an einem (bestimmt kleinen) Problem hängen.

Der Atmega8 ist über ein USB zu UART Konverter mit dem PC verbunden und 
schickt den aktuellen Schaltzustand an den PC, dieser wird dann durch 
mein in Visual Basic geschriebenen Programm verarbeitet. Das geht soweit 
auch wunderbar.

Wenn ich jedoch von Visual Basic (PC) eine Zahl zwischen 0 und 255 an
den Mikrocontroller sende (welche ich vorher mit chr in ein ASCII 
verwandle)
dann kann der Mikrocontroller die Zahlen (ASCII) oberhalb von 127 nicht 
verarbeiten! Mir ist soweit klar das dem Mikrocontroller theoretisch 
irgendwie erklärt werden müsste das er diese Zeichen (oberhalb von 127)
auch verarbeiten soll.

Oder kann mir jemand bitte eine andere Alternative 
Übertragungmöglichkeit von PC zu Mikrocontroller nennen in der ich eine 
einfache Zahl von 0 bis 255 übertragen kann und dann mit dieser Zahl im 
Mikrocontroller rechnen um die Schaltzustände zu ändern.

Danke.

Solltet ihr noch irgendwelche Angaben von mir benötigen so fragt bitte.
Und bitte vergesst nicht, ich beschäftige mich erst seit ca. 2 Wochen 
mit Mikrocontrollern, also mein Wissen ist bestimmt noch SEHR klein.

P.S. ich nutze die UART von Peter Fleury

Danke an alle die mir ein wenig weiter Helfen...

von Ich (Gast)


Lesenswert?

Poste bitte deinen Source als Anhang.
Sonst wirds schwierig...

von Henri G. (hene42)


Angehängte Dateien:

Lesenswert?

hier meine main.c

Danke.

von Ich (Gast)


Lesenswert?

Hm, Deine Empfangsroutine schaut irgendwie komisch aus.
Soweit ich die von dir verwendete Uart Lib kenne, liefert diese die 
empfangenen Daten Byteweise.
Im oberen Byte steht jeweils der Empfangsstatus.

Siehe auch Doku zur Lib: 
(http://homepage.hispeed.ch/peterfleury/group__pfleury__uart.html)

>unsigned int uart_getc   (    void       )


>Get received byte from ringbuffer.

>Returns in the lower byte the received character and in the higher byte
>the last receive error. UART_NO_DATA is returned when no data is
>available.

>Parameters:
>      void

>Returns:
>    lower byte: received byte from ringbuffer

>    higher byte: last receive status

>        0 successfully received data from UART
>        UART_NO_DATA
>        no receive data available
>        UART_BUFFER_OVERFLOW
>        Receive ringbuffer overflow. We are not reading the receive
>        buffer fast enough, one or more received character have been
>        dropped
>        UART_OVERRUN_ERROR
>        Overrun condition by UART. A character already present in the
>        UART UDR register was not read by the interrupt handler before
>        the next character arrived, one or more received characters have
>        been dropped.
>        UART_FRAME_ERROR
>        Framing Error by UART

Schau mal bei 
http://nktronik.de/wiki/index.php?title=RS232_-_Output_Board vorebi, und 
schau dir dort mal den Source an.
Da siehtst du, wie die Empfangsroutine aussehen kann

von Henri G. (hene42)


Lesenswert?

Hallo, nach nochmaligem lesen aller Beiträge habe ich das erste Problem 
gelöst. Stehe jetzt jedoch vor einem neuen.

Die Daten kommen jetzt an, aber wie muss ich die Daten Formatieren um 
solche If - Schleifen zu gestalten wie hier angegeben.

Ich wäre euch für Hilfe sehr dankbar.
1
unsigned int empf;
2
unsigned int empfi;
3
    
4
while (1) 
5
 {
6
   empfi = uart_getc();
7
    if ( empfi & UART_NO_DATA )
8
     {
9
       // keine Daten erhalten
10
     }
11
    else
12
    {
13
      empf = ((unsigned char)empfi);
14
  
15
  if (empf > 127)
16
     {
17
    PORTB |= (1<<PB5);
18
    empf = (empf -128);
19
      }
20
  else
21
      {
22
    PORTB &= ~(1<<PB5);
23
      }

von Karl H. (kbuchegg)


Lesenswert?

Henri Großmann schrieb:
> Hallo, nach nochmaligem lesen aller Beiträge habe ich das erste Problem
> gelöst. Stehe jetzt jedoch vor einem neuen.

Hier gehts weiter
Beitrag "atoi oder char zu integer - Anfängerfrage"

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.