Hallo! Ich möchte mit Hilfe eines ATmega162 die Daten (zunächst ASCII-, später binäre Daten) eines GPS-Empfängers per TCP an eine Spezialsoftware auf einem normalen PC schicken. Der µC ist deswegen notwendig, weil diese besagte Software nur dann die GPS-Daten akzeptiert, wenn vorher eine spezielle Kennung (die in den GPS-Daten nicht enthalten ist) geschickt wird. Daher habe ich mir einen AVR mit 2 UARTs gesucht, zwei MAX232 angeschlossen und alles in eine Kiste gepackt. Direkt nach dem Start wird die Kennung ("SOURCE ...") geschickt. Die GPS-Daten kommen dann mit 9600 Baud herein und werden per Interrupt an den zweiten UART übergeben (ebenfalls 9600 Baud), der an einen serial-to-ethernet-Konverter (conline) angeschlossen ist. Ein einfacher TCP-Server auf dem Rechner zeigt, dass das Programm (siehe unten) prinzipiell funktioniert; also vernünftige Daten übertragen werden. Die Programmierung erfolgte übers AVRStudio mit einen AVRDragon über JTAG. Die Spannungsversorgung des µC erfolgt über einen RECOM DC/DC-Wandler; also wohl recht stabil... Das Problem ist nun, dass der µC etwa jede Minute abstürzt (erkennbar daran, dass die Kennung "SOURCE..." neu geschickt wird), wenn der AVRDragon noch an der Schaltung hängt. Ohne AVRDragon stürzt er aber sogar etwa alle 10 Sekunden ab! Woran kann das liegen? Ich habe schon versucht, das JTAGEN-Bit auszuschalten (hat ausser einem Aussperren nichts bewirkt) oder an den Pullup-Widerständen der JTAG-Pins (PC4-PC7) zu spielen. Nichts hilft. Kann mir da jemand helfen? Vielen Dank!!! Markus Quellcode: ---------- #ifndef F_CPU #define F_CPU 3686400UL #endif #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <stdlib.h> #define USART_BAUDRATE 9600 #define BAUD_PRESCALE 2 // (((F_CPU / (USART_BAUDRATE * 16UL)))-1) // Interrupt-Routine // ================= ISR(USART0_RXC_vect){ //cli(); UDR1 = UDR0; PORTC |= (1<<PC0); // Schaltet DATA OUT-LED an //sei(); } void sendWord(char Message[100]) { int i; for (i = 0; i < strlen(Message); i++) { while( !(UCSR1A & (1<<UDRE1) ) ); UDR1 = Message[i]; } } int main(void) { DDRA = 0b00000000; // Alle Pins auf Eingang PORTA = 0b11111111; // Alle pull-up-Widerst�nde an DDRB = 0b00000000; PORTB = 0b11111111; // backup DDRC = 0b00000001; // backup PORTC = 0b11111110; // 11000011 // xxxx PINs für JTAG-Programmierung DDRC = 0b11110001; PORTC = 0b11111110; // 11000011 DDRD = 0b00000000; PORTD = 0b11111111; DDRE = 0b00000000; PORTE = 0b11111111; // UART0 (zum Lesen) UCSR0A = 0x00; UCSR0B = ( (1<<RXCIE0) | (1<<RXEN0) ); //UCSR0B = ( (1<<RXCIE0) | (1<<RXEN0) | (1<<TXEN0) ); // 0 ? UCSR0C = ( (1 << UMSEL0 ) | // Configure for asynchronous operation (0<<UPM01) | // No parity UPM?1 und UPM?0 ? = 1 oder 0 (0<<UPM00) | (0<<USBS0) | // 1 stopbit (1<<UCSZ01) | // 8 data bits UCSZ?1 und UCSZ?0 ? = 1 oder 0 (1<<UCSZ00) ); UBRR0H = (BAUD_PRESCALE >> 8); UBRR0L = BAUD_PRESCALE; // UART1 (zum Schreiben) UCSR1A = 0x00; UCSR1B = ( (1<<TXEN1) ); //UCSR1B = ( (1<<RXCIE1) | (1<<RXEN1) | (1<<TXEN1) ); // 0 ? UCSR1C = ( (1 << UMSEL1 ) | // Configure for asynchronous operation (0<<UPM11) | // No parity UPM?1 und UPM?0 ? = 1 oder 0 (0<<UPM10) | (0<<USBS1) | // 1 stopbit (1<<UCSZ11) | // 8 data bits UCSZ?1 und UCSZ?0 ? = 1 oder 0 (1<<UCSZ10) ); UBRR1H = (BAUD_PRESCALE >> 8); UBRR1L = BAUD_PRESCALE; // Hier einmaliges Anmelden an Caster // Verschicke "SOURCE password/ABCD0\r\nSource-Agent: NTRIP NtripServerAVR/0.01\r\n\r\n" sendWord( "\r\n\r\n\r\n" ); int i; for (i=0;i<2;i++) { _delay_ms(100); } sendWord( "SOURCE pwd TEST0\r\nSource-Agent: NTRIPNtripServerAVR\r\n\r\n\r\n" ); sei(); for (;;) { PORTC &= ~(1<<PC0); // Schaltet DATA OUT-LED wieder aus } }
Schaltplan? Speziell: wie ist der Reseteingang des M162 beschaltet? Wie sind die Fuses gesetzt?
Hallo! einen Schaltplan habe ich nicht zu bieten. Mangels besseren Wissens habe ich mit dem Reseteingang gar nichts gemacht. Er ist also offen! Was soll ich denn damit machen? Die Fuses sehen folgendermaßen aus: M161C 0 BODLEVEL Brown-out detection disabled OCDEN 0 JTAGEN 1 SPIEN 1 WDTON 0 EESAVE 0 BOOTSZ Boot Flash size=1024 words start adress=$1C00 BOOTRST 0 CKDIV8 1 CKOUT 0 SUT_CKSEL Ext. Crystal Osc. 8.0- MHz; Start-up time: 16K CK + 65 ms EXTENDED 0xFF HIGH 0x99 LOW 0x7F Gruss, Markus
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.