Problem mit der Übertragung von 16-Bit Variablen über UART

#1311153
Lesenswert?

Moin moin.

Folgendes Problem: Ich hab ein Rechtecksignal an INT0, und ich will ca. 
wissen, wieviel mal pro sekunde das zwischen 0 und 5v hin und her 
schwankt ( muss nicht allzugenau sein ) und das per UART auf den PC 
übertragen. Hier ein Ausschnit aus meinem Code:
1
typedef union {
2
  uint16_t l;
3
  uint8_t b[2];
4
} typ_mixed;
5

6
typ_mixed gs;
7

8

9
SIGNAL(SIG_INTERRUPT0){
10
        gs.l++;
11
}
12

13
main(void){
14
        MCUCR |= (1<<ISC10)|(1<<ISC00);
15
        uart_init();
16
        for(;;){
17
                gs.l=0
18
                GICR |= (1<<INT0)|(1<<INT1);
19
                wait(500);
20
                GICR &= ~(1<<INT0)|(1<<INT1);
21
                uart_send(gs.b[0]);
22
                uart_send(gs.b[1]);
23
       }
24
}

Hier mein Problem: Selbst wenn ich INT0 dauernd auf Masse habe, sendet 
mir der AVR nur Kram zurueck: Zb 0x01 0xad anstatt 0x00 0x00.

Wie kann das sein? Alle anderen Kommunikationen per uart funktionieren 
einwandfrei!
Moderator (Firma: Titel) Persönliche Seite #1316923
Lesenswert?

>         MCUCR |= (1<<ISC10)|(1<<ISC00);
Hm, du manipulierst den Int1 und den Int0-Pin, ist das Absicht?
Du veroderst die Bits nur dazu, was stand vorher im MCUCR-Register?
Falls da vorher 0x00 drinstand, dann hast du RESERVED VALUES in die Bits 
ISC11 und ISC10 sowie ISC01 und ISC00 geschrieben...
Das solltest du dir nochmal genauer anschauen :-/
Gast #1317724
Lesenswert?

Hallo,

Zeichen ausserhalb des gültigen Wertebereiches von darstellbaren 
ASCII-Zeichen werden meist als Steuerzeichen interpretiert und führen 
dann je nach Terminalprogramm zu unterscheidlichen Ausgaben.

Wenn Du mit einer Brücke TxD mit RxD verbindest, wird das 
Terminalprogramm i.A. auch nur druckbare Zeichen anzeigen, weil die 
nicht druckbaren etwas schwieriger einzugeben sind.

Du müsstest die beiden Bytes zuvor noch in eine Textzeichenkette 
konvertieren.

z.B.
1
#include <stdlib.h>
2

3
{
4
  char msg[7];
5

6
  itoa( (int)gs.l, msg, 7 );
7
  uart_puts( msg);
8
}

Hermann-Josef

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren