Forum: Compiler & IDEs Doppelte Sendung beim Start


von Vasquez77 (Gast)


Lesenswert?

Hallo liebes Forum !!!

Ich habe ein kleines Programm geschrieben, in dem eine Ausgabe über ein 
Display erfolgt und danach Daten von der ersten seriellen Schnittstelle 
zur zweiten weitergereicht werden.

Die Libarys sind von Peter Fleury, was die Uart Unterstützung angeht.

Das Phänomen ist, dass nach dem Start der Ablauf korrekt abgearbeitet 
wird (d.h. Display ansteuern, und while-Schleifen durchlauf), dann aber 
erfolgt alles nochmal...das soll so natürlich nicht sein.

Anbei ein Bild der Datenübertragung, man kann sehr schön sehen, dass 
"TI" (also zur Initialisierung des Displays zweimal gesendet wird).

(In rot umrandet = eigentlich überflüssig).


Doch wie gesagt, eigentlich darf dies vom Code nur einmal erfolgen...
Womit kann das evtl. zu tun haben ?

Hier der Code:

#include <stdlib.h>
#include <avr/io.h>
#include <string.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/pgmspace.h>
#include <util/delay.h> /* define CPU frequency in Mhz here if not 
defined in Makefile */
#include "initlcd.h"
#include "uart.h"

#define UART_BAUD_RATE      9600

 main(void) {
  unsigned int c;
  unsigned int TI[12]={0x11,0x03,0x1B,0x54,0x49,0xCC};
  unsigned int 
UI3[12]={0x11,0x04,0x1B,0x55,0x49,0x00,0x00,0x00,0x00,0x03,0xD1};
  uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
    uart1_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
  initlcd();
  _delay_ms(200);
   sei();
  while(1){
        c = uart_getc();
        if ( c & UART_NO_DATA ){
      ;
    } else {
      uart1_putc( (unsigned char)c );
      }
  }
  return 0;
}

Vielleict ein genereller Fehler bei der Initialisierung des µc´s ???
Über Hilfe wäre ich sehr DANKBAR!!!

von dkar (Gast)


Lesenswert?

Wozu sind TI und UI3 da? Die werden doch gar nicht benutzt.
Was macht initlcd()? Wo ist der Code dazu?
Rückgabetyp von main() fehlt.

Der Code, den du gepostest wird nicht einmal warnungsfrei compilieren. 
Was soll man schon dazu sagen?

von Vasquez77 (Gast)


Lesenswert?

Hab den Code beim Einfügen vertauscht...

Hier:
#include <stdlib.h>
#include <avr/io.h>
#include <string.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/pgmspace.h>
#include <util/delay.h> /* define CPU frequency in Mhz here if not 
defined in Makefile */
#include "Lcd.h"
#include "uart.h"

#define UART1_Data  UDR1

/* define CPU frequency in Mhz here if not defined in Makefile
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
*/

#define UART_BAUD_RATE      9600






 int main(void) {
  unsigned int c;
  /* unsigned char TI[7]={17,3,27,84,73,204}; <DC1> , LEN , 1 , 2 , 3 , 
BCC */
  unsigned int TI={0x11,0x03,0x1B,0x54,0x49,0xCC};
  // char UI3[11]={17,8,27,85,73,0x00,0x00,0x00,0x00,3,213};
  /* unsigned char UI3[11]={0x11,0x04,0x1B,0x4D,0x4E,0x14,0xDF}; */
  unsigned int 
UI3={0x11,0x04,0x1B,0x55,0x49,0x00,0x00,0x00,0x00,0x03,0xD1};
  uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
    uart1_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
    initlcd();

   sei();
  while(1){

        c = uart_getc();
        if ( c & UART_NO_DATA ){
      ;
    } else {
      uart1_putc( (unsigned char)c );
      }
  }
  return 0;
}


und für initlcd():

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include "uart.h"

void initlcd()
{
  uart1_putc(0x11); /* <DC1> */
  uart1_putc(0x03); /* <len> */
  uart1_putc(0x1B); /* <Esc> */
  uart1_putc(0x54); /* <T> */
  uart1_putc(0x49); /* <I> */
  uart1_putc(0xCC); /* <bcc> , Prüfsumme Modulo 256 */

}

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
Noch kein Account? Hier anmelden.