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...
Poste bitte deinen Source als Anhang. Sonst wirds schwierig...
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
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 | }
|
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"