Habe jetzt mit einer etwas größeren Lupe alle Lötstellen überprüft und zwei nachgelötet, obwohl die gut aussahen. Jetzt geht es. Zeiten passen.
Danke schonmal.
Jedoch klappt das mit HTERM noch nicht. Bekomme dort nichts angezeigt.
Hier nochmal mein Code. Passt das unten vor der LED Routine mit dem "uart_puts ( ARRAY ); mit dem Array senden?
Code:
#define F_CPU 14745600UL // CPU Taktfrequenz
#include <util/delay.h> //
#include <avr/io.h> //
#include <inttypes.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
///////////// ---- Baudrate ---- /////////////
#define BAUD 9600UL // Baudrate
// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
/*
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
#error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
#endif
*/
///////////// ---- Initalisiere UART ---- /////////////
void uart_init(void) {
UBRR0H = UBRR_VAL >> 8;
UBRR0L = UBRR_VAL & 0xFF;
UCSR0B |= (1<<TXEN0) |(1<<RXEN0); // UART TX / RX einschalten
UCSR0C = (1<<UMSEL01)|(1<<UCSZ01)|(1<<UCSZ00); // Asynchron 8N1
}
///////////// ---- UART Senden ---- /////////////
int uart_putc(unsigned char sende) {
while (!(UCSR0A & (1<<UDRE0))) /* warten bis Senden moeglich */
{
}
UDR0 = sende; /* sende Zeichen */
return 0;
}
/* puts ist unabhaengig vom Controllertyp */
void uart_puts (char *s){
while (*s)
{ /* so lange *s != '\0' also ungleich dem "String-Endezeichen(Terminator)" */
uart_putc (*s);
s++;
}
}
///////////// ---- MAIN ---- /////////////
int main(void) {
DDRC = 0xFF;
int16_t zw = 0; //interner Schleifenzähler
int16_t sendeDaten1 [5]; //WErte Array1
int16_t sendeDaten2 [5]; //WErte Array2
char daten1 [31]; //Sende Array1 --> [x32000x12345x67890x......]
char daten2 [31]; //Sende Array2
uart_init();
while (1) {
for (int16_t i=0; i<6; ++i){
sendeDaten1 [i] = rand() % 100; //Zufallswerte in das 1. werte Array
sendeDaten2 [i] = rand() % 100; //Zufallswerte in das 2. werte Array
daten1[zw] = 'x'; //Trennzeichen x vor jeden WErt
daten2[zw] = 'x'; //Trennzeichen x vor jeden WErt
itoa (sendeDaten1 [i], daten1[zw+1], 10);
itoa (sendeDaten1 [i], daten2[zw+1], 10);
zw = zw+6; //
}
uart_puts( daten1 ); //erste daten Array als ASCII senden
uart_puts( daten2 ); //zweites daten Array als ASCII seden
while (1){
///// Test Routine ´LED Test ///////
PORTC |= (1<<PC0); // Ausgang auf 1
_delay_ms(100);
PORTC |= (1<<PC1);
_delay_ms(100);
PORTC |= (1<<PC2);
_delay_ms(100);
PORTC &= ~(1<<PC0); // Ausgang auf 0
_delay_ms(100);
PORTC &= ~(1<<PC1);
_delay_ms(100);
PORTC &= ~(1<<PC2);
_delay_ms(100);
}
}
}
Lesezeichen