Hallo leute, ich bin ess schon wieder.

Unser nächstes Problem besteht darin, dass ich den inhalt vom TCNT1 auf die schnittstelle heraus geben will. Dies geht aber irgendwie nicht so richtig, wie ich mir dass so vorstelle.

Ein Freund hat diesen Testprogram entwickelt damit der Atmel den eingegebenen text im VBTREM (Sonderprogram) liest und wieder zurückschickt.

Ich habe lediglich die Rot markierten zeilen eingefügt, um zu testen, ob der Atmel mir dass herrausgibt, wass ich will.

Das Program funktioniert so:

Der Atmel fragt immer dien Sendeport ab nach neuen informationen. Wird ein Zeichen zum Atmel gesendet, so speichert er dieser den Wert in den buffer und dann sendet er das Zeichen zur schnittstelle zurück.

Die rot markierten Zeilen habe ich eingefügt, damit mit der Atmel, bei jedem gesendeten Zeichen diesen durch den Wert von TEST ersetzt und diesen dann zurückschickt anstatt des von mir gesendeten Zeichens.

kurz:
Egal welches Zeichen ich in den VBTERM eingebe, soll mir der Atmel den vert von TEST, also 576 zurücksenden.

VBTERM ist ein program in dem ich die Zeichen (Ziffern oder auch ganze sätze)eingeben kann , die ich dem Atmel senden will.




Code:
#include <avr/io.h> 
#include <inttypes.h> 


// Sollte schon im Makefile definiert sein. 
// In dem Fall hier einfach löschen. 
#define F_CPU 3686000UL 

#define BAUD 9600UL 
#define UBRR_BAUD ((F_CPU/(16L*BAUD))-1) 

int TEST;

TEST = 576;

// USART initialisieren 
void uart_init(void) 
{ 
// Baudrate einstellen (Normaler Modus) 
UBRRH = (uint8_t) (UBRR_BAUD>>8 ); 
UBRRL = (uint8_t)UBRR_BAUD; 

// Aktivieren von receiver und transmitter 
UCSRB = (1<<TXEN) | (1<<RXEN); 

// Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit 
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); 
						//UCSRC |= (1<<URSEL)|(3<<UCSZ0); 
} 

int main(void) 
	{
   

 
	uint8_t buffer; 

	// USART initialisieren 
	uart_init(); 

	while (1) 
		{ 
		// Warten bis Daten empfangen wurden 
		while ( !(UCSRA & (1<<RXC)) ); 

		// Empfangsregister auslesen */
		buffer = UDR; 

	buffer = TEST;

		// Warten bis der Sendepuffer frei ist 
		while ( !( UCSRA & (1<<UDRE)) ); 

		// Daten in den Puffer schreiben und damit senden 
		UDR = buffer; 
		} 
                return 0; 

	}

Nur leider sendet mir der Atmel nicht den Wert von TEST (576) sondern er wandelt diesen Wert in ein ASCII-Zeichen um und sendet mir diesen.


Beide Programme (also der Sendeprogramm und den Ersten programm für die B2) muss ich anschliesend miteinander verbinden damit der Atmel den erstmals ermittelten wert von TCNT1 schickt.

Diesen benötige ich, um die Interrupts so genau wie möglich an der Netzfrequez anzupassen.




Mein Kollege und ich sind schon am verzweiffeln.
Wenn wir schreiben
TEST = '576';
Sendet uns der Atmel , bei jeder eingabe im VBTERM, immer nur die letzte Ziffer, also 6.


Wass können wir da tun damit der Atmel uns "576" Sendet anstatt irgendwass anderes???






Euer Nightlord