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!!!
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.