Doppelte Sendung beim Start

Gast #3304511
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!!!
Gast #3304521
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?
Gast #3304541
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 */

}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.