- Labornetzteil AliExpress         
Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 53

Thema: USART - WARUM GEHT ES NICHT? - BITTE HELFT MIR

  1. #11
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Anzeige

    Powerstation Test
    Zitat Zitat von Kaiser-F
    An dieser Stelle hätte ich noch eine kurze Frage;

    Wenn ich ein signal empfange, dann führt der MCU die Interruptroutine aus, aber er sendet auch wieder "USART INIT - OK",

    Er führt also die main-Funktion von anfang an wieder aus[...]
    Das kann eigentlich nur dann passieren, wenn dein AVR abschmiert und ab RESET neu anfängt. Das könnte zB passieren, wenn dein SRAM überläuft (Stack etc) oder ein Interrupt ausgelöst wird, zu dem es keine ISR gibt. Die avr-gcc Defaults für die VECTAB sind RESET-Einträge.

    Allerdings sehe ich jetzt nicht, warum das in deinem Beispiel so sein sollte.
    Disclaimer: none. Sue me.

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    hmmm in der ISR muss man das RXC-Flag löschen, damit direkt nach Beenden der ISR diese nicht sofort wieder angesprungen wird. Das geschieht normalerweise durch Lesen von UDR.
    Im Fehlerfalls empfieht das Manual nen flush der Art
    while (UCSRA & (1 << RXC)) dummy = UDR;

    Falls das RXC-Flag das Poblem ist, verstehe ich aber immer noch nicht, warum ein Restart gemacht wird. Und falls der flush fehlt, geht er solange in die ISR bis das RXC resettet ist... *grübel*
    Disclaimer: none. Sue me.

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    38
    Beiträge
    795
    Oh mann oh mann....

    dass das immer bei mir sein muss? und ausgerechnet bei eigentlich einfachen sachen???

    Ich les grad nochmal den interrupt bereich im Datenblatt.... evtl steht da was...
    Gruß,
    Franz

  4. #14
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Um es auszuschließen: Schau mal, ob die RAMTOP Annahme des Compilers mit der Realität übereinstimmt. (Und ob er eh für den richtigen Prozessor übersetzt )
    Wenn nicht, kann es sehr seltsame Effekte geben.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #15
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Um auch das auszuschliessen: Du benutzt doch nen Pegelwandler wie MAX232?
    Disclaimer: none. Sue me.

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    38
    Beiträge
    795
    Jap, ich benutze ein MAX232:

    Um es mal ein wenig greifbarer zu machen;

    Biddeschön

    EDIT: Wohlgemerkt, ich kann jetzt Daten Empfangen, aber wie gesagt, das mit dem Interrupt ist so komisch, dass der die MAIN() Funktion NEU ausführt, den Gesendeten Wert merkt er sich... und gibt in aus
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken 1_723.jpg   2_178.jpg  
    Gruß,
    Franz

  7. #17
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    hmmm Mus dass TxD des PC nicht zum RxD des µC?
    Rxd ist IN unf TxD ist OUT, sonst schaltest zu 2 Ausgänge/Eingänge zusammen.
    Wundert mich, daß su überhaupt was rüberkommt...
    Disclaimer: none. Sue me.

  8. #18
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    38
    Beiträge
    795
    Am board sind Jumper, welche ich um 90°drehe, um diese zu kreuzen... weil ich ja noch einen USART-Stecker habe, mir den ich zwei testboards verbinde.... da muss dann eines kreuzbar sein....

    das stimmt dann schon. Bei interesse kann ich euch ja den Ganzen Plan geben...



    EDIT:

    Hier die LSS file, für PickNicks Ausschließverfahren

    PS: in der Makefile steht:
    # MCU name
    MCU = atmega8535

    Code:
    main.elf:     file format elf32-avr
    
    Sections:
    Idx Name          Size      VMA       LMA       File off  Algn
      0 .text         000000ec  00000000  00000000  00000094  2**0
                      CONTENTS, ALLOC, LOAD, READONLY, CODE
      1 .data         00000012  00800060  000000ec  00000180  2**0
                      CONTENTS, ALLOC, LOAD, DATA
      2 .bss          00000001  00800072  00800072  00000192  2**0
                      ALLOC
      3 .noinit       00000000  00800073  00800073  00000192  2**0
                      CONTENTS
      4 .eeprom       00000000  00810000  00810000  00000192  2**0
                      CONTENTS
      5 .stab         000003b4  00000000  00000000  00000194  2**2
                      CONTENTS, READONLY, DEBUGGING
      6 .stabstr      000005af  00000000  00000000  00000548  2**0
                      CONTENTS, READONLY, DEBUGGING
    Disassembly of section .text:
    
    00000000 <__vectors>:
       0:	14 c0       	rjmp	.+40     	; 0x2a
       2:	2d c0       	rjmp	.+90     	; 0x5e
       4:	2c c0       	rjmp	.+88     	; 0x5e
       6:	2b c0       	rjmp	.+86     	; 0x5e
       8:	2a c0       	rjmp	.+84     	; 0x5e
       a:	29 c0       	rjmp	.+82     	; 0x5e
       c:	28 c0       	rjmp	.+80     	; 0x5e
       e:	27 c0       	rjmp	.+78     	; 0x5e
      10:	26 c0       	rjmp	.+76     	; 0x5e
      12:	25 c0       	rjmp	.+74     	; 0x5e
      14:	24 c0       	rjmp	.+72     	; 0x5e
      16:	23 c0       	rjmp	.+70     	; 0x5e
      18:	22 c0       	rjmp	.+68     	; 0x5e
      1a:	21 c0       	rjmp	.+66     	; 0x5e
      1c:	20 c0       	rjmp	.+64     	; 0x5e
      1e:	1f c0       	rjmp	.+62     	; 0x5e
      20:	1e c0       	rjmp	.+60     	; 0x5e
      22:	1d c0       	rjmp	.+58     	; 0x5e
      24:	1c c0       	rjmp	.+56     	; 0x5e
      26:	1b c0       	rjmp	.+54     	; 0x5e
      28:	1a c0       	rjmp	.+52     	; 0x5e
    
    0000002a <__ctors_end>:
      2a:	11 24       	eor	r1, r1
      2c:	1f be       	out	0x3f, r1	; 63
      2e:	cf e5       	ldi	r28, 0x5F	; 95
      30:	d2 e0       	ldi	r29, 0x02	; 2
      32:	de bf       	out	0x3e, r29	; 62
      34:	cd bf       	out	0x3d, r28	; 61
    
    00000036 <__do_copy_data>:
      36:	10 e0       	ldi	r17, 0x00	; 0
      38:	a0 e6       	ldi	r26, 0x60	; 96
      3a:	b0 e0       	ldi	r27, 0x00	; 0
      3c:	ec ee       	ldi	r30, 0xEC	; 236
      3e:	f0 e0       	ldi	r31, 0x00	; 0
      40:	02 c0       	rjmp	.+4      	; 0x46
    
    00000042 <.do_copy_data_loop>:
      42:	05 90       	lpm	r0, Z+
      44:	0d 92       	st	X+, r0
    
    00000046 <.do_copy_data_start>:
      46:	a2 37       	cpi	r26, 0x72	; 114
      48:	b1 07       	cpc	r27, r17
      4a:	d9 f7       	brne	.-10     	; 0x42
    
    0000004c <__do_clear_bss>:
      4c:	10 e0       	ldi	r17, 0x00	; 0
      4e:	a2 e7       	ldi	r26, 0x72	; 114
      50:	b0 e0       	ldi	r27, 0x00	; 0
      52:	01 c0       	rjmp	.+2      	; 0x56
    
    00000054 <.do_clear_bss_loop>:
      54:	1d 92       	st	X+, r1
    
    00000056 <.do_clear_bss_start>:
      56:	a3 37       	cpi	r26, 0x73	; 115
      58:	b1 07       	cpc	r27, r17
      5a:	e1 f7       	brne	.-8      	; 0x54
      5c:	2f c0       	rjmp	.+94     	; 0xbc
    
    0000005e <__bad_interrupt>:
      5e:	d0 cf       	rjmp	.-96     	; 0x0
    
    00000060 <USART_init>:
    volatile static uint8_t data;
    
    void USART_init(void){  
    
    	UBRRH = 0;
      60:	10 bc       	out	0x20, r1	; 32
        UBRRL = (uint8_t) USART_BAUD_SELECT; 
      62:	83 e0       	ldi	r24, 0x03	; 3
      64:	89 b9       	out	0x09, r24	; 9
    	
    	/* Aktivieren des Empfängers, des Senders und des "Daten empfangen"-Interrupts */
    	UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
      66:	88 e9       	ldi	r24, 0x98	; 152
      68:	8a b9       	out	0x0a, r24	; 10
    
    	/* Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit */
    	UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
      6a:	86 e8       	ldi	r24, 0x86	; 134
      6c:	80 bd       	out	0x20, r24	; 32
    
    	data = UDR;
      6e:	8c b1       	in	r24, 0x0c	; 12
      70:	80 93 72 00 	sts	0x0072, r24
      74:	08 95       	ret
    
    00000076 <USART_transmit>:
    
    } 
    
    void USART_transmit(uint8_t c){ 
       while(!(UCSRA & (1<<UDRE)));
      76:	5d 9b       	sbis	0x0b, 5	; 11
      78:	fe cf       	rjmp	.-4      	; 0x76
       UDR = c; 
      7a:	8c b9       	out	0x0c, r24	; 12
      7c:	08 95       	ret
    
    0000007e <USART_transmit_string>:
    } 
    
    void USART_transmit_string(uint8_t *string){ 
      7e:	cf 93       	push	r28
      80:	df 93       	push	r29
      82:	ec 01       	movw	r28, r24
        while(!(UCSRA & (1<<UDRE)));
      84:	5d 9b       	sbis	0x0b, 5	; 11
      86:	fe cf       	rjmp	.-4      	; 0x84
    	while( *string){ USART_transmit (*string++); }
      88:	88 81       	ld	r24, Y
      8a:	88 23       	and	r24, r24
      8c:	29 f0       	breq	.+10     	; 0x98
      8e:	89 91       	ld	r24, Y+
      90:	f2 df       	rcall	.-28     	; 0x76
      92:	88 81       	ld	r24, Y
      94:	88 23       	and	r24, r24
      96:	d9 f7       	brne	.-10     	; 0x8e
      98:	df 91       	pop	r29
      9a:	cf 91       	pop	r28
      9c:	08 95       	ret
    
    0000009e <SIG_USART_RECV>:
    }
    
    
    
    
    SIGNAL( SIG_USART_RECV ) 
    { 
      9e:	1f 92       	push	r1
      a0:	0f 92       	push	r0
      a2:	0f b6       	in	r0, 0x3f	; 63
      a4:	0f 92       	push	r0
      a6:	11 24       	eor	r1, r1
      a8:	8f 93       	push	r24
        
       data = UDR;  
      aa:	8c b1       	in	r24, 0x0c	; 12
      ac:	80 93 72 00 	sts	0x0072, r24
      b0:	8f 91       	pop	r24
      b2:	0f 90       	pop	r0
      b4:	0f be       	out	0x3f, r0	; 63
      b6:	0f 90       	pop	r0
      b8:	1f 90       	pop	r1
      ba:	18 95       	reti
    
    000000bc <main>:
    
    } 
    
    
    int main (void)
    {
      bc:	cf e5       	ldi	r28, 0x5F	; 95
      be:	d2 e0       	ldi	r29, 0x02	; 2
      c0:	de bf       	out	0x3e, r29	; 62
      c2:	cd bf       	out	0x3d, r28	; 61
    // D A T E N R I C H T U N G :
    //===============================================
    
    //	PORTA Pin: 76543210	  ( 0 = Eingang/Pullup aus, 1= Ausgang/Pullup ein )
        DDRA   = 0b11111111;	//
      c4:	8f ef       	ldi	r24, 0xFF	; 255
      c6:	8a bb       	out	0x1a, r24	; 26
        PORTA  = 0b00000000;	// 
      c8:	1b ba       	out	0x1b, r1	; 27
    
    //	PORTB Pin: 76543210	  ( 0 = Eingang/Pullup aus, 1= Ausgang/Pullup ein )	
        DDRB   = 0b00000000;	//
      ca:	17 ba       	out	0x17, r1	; 23
    	PORTB  = 0b00000000;	//
      cc:	18 ba       	out	0x18, r1	; 24
    	
    //	PORTC Pin: 76543210	  ( 0 = Eingang/Pullup aus, 1= Ausgang/Pullup ein )
        DDRC   = 0b00000000;	//
      ce:	14 ba       	out	0x14, r1	; 20
    	PORTC  = 0b11111111;	//
      d0:	85 bb       	out	0x15, r24	; 21
    	
    //	PORTD Pin: 76543210	  ( 0 = Eingang/Pullup aus, 1= Ausgang/Pullup ein )
        DDRD   = 0b11111111;	//
      d2:	81 bb       	out	0x11, r24	; 17
    	PORTD  = 0b00000000;	//
      d4:	12 ba       	out	0x12, r1	; 18
    	
    	
    
     
    USART_init();
      d6:	c4 df       	rcall	.-120    	; 0x60
    USART_transmit_string("USART INIT - OK  ");
      d8:	80 e6       	ldi	r24, 0x60	; 96
      da:	90 e0       	ldi	r25, 0x00	; 0
      dc:	d0 df       	rcall	.-96     	; 0x7e
     
     sei();
      de:	78 94       	sei
     
    while (1) { 
    
    PORTA = UCSRA;
      e0:	8b b1       	in	r24, 0x0b	; 11
      e2:	8b bb       	out	0x1b, r24	; 27
    PORTD = data;
      e4:	80 91 72 00 	lds	r24, 0x0072
      e8:	82 bb       	out	0x12, r24	; 18
      ea:	fa cf       	rjmp	.-12     	; 0xe0
    Gruß,
    Franz

  9. #19
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Na ja, "USART-INIT" kommt ja offenbar richtig raus.

    Wie geht's denn rechts mit RTS und CTS weiter ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    38
    Beiträge
    795
    RTS und CTS können an PD2 und PD3 gejunpert werden.... andernfalls wird CTS HIGH gehalten (10K)


    SCHONWIEDER EDIT: Ich benutze übrigens HTerm als Terminalprogramm
    Gruß,
    Franz

Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress