So ich hoffe mal, dass ich mich nicht blamiere ;)
Ich benutze einen ATMEGA168 und möchte einen AD7687 (ADWandler)
ansteuern.
ich nutze dden USART im MSPIM, dieser ist auch korrekt konfiguriert,
denn einen DAC kann ich bereits ansteuern.
Den AD Wandler steuert man mit einer Flanke an mit folgendem Einlesen.
Er spuckt 16Bit aus.
Ich benutze folgenden Code, er führt die Schleife einmal aus, bleibt
dann aber beim neuen Durchlauf hängen in der Receive Funktion.
Es steht alles in der main(), die Ports etc sind korrekt eingestellt.
1 | for (int i; i <= 4; i++) _delay_us(1);
|
2 | PORTD ^= (1<<PD2);
|
3 | for (int i; i < 2; i++) _delay_us(1);
|
4 | PORTD ^= (1<<PD2);
|
5 | for (int i; i <= 10; i++) _delay_us(1);
|
6 |
|
7 | cnv_data[0] =
|
8 | USART_Receive();
|
9 |
|
10 | cnv_data[1] =
|
11 | USART_Receive();
|
12 |
|
13 | for (int i; i <= 10; i++) _delay_us(1);
|
14 |
|
15 | USART_Flush();
|
16 |
|
17 | // for (int i; i <= 1000; i++) _delay_us(1);
|
18 | //if( cnv_data[0] > 0 || cnv_data[1] > 0 )
|
19 | PORTD ^= (1<<PD5);
|
____________________________________________________________
Die Versuche mit dem Flush Befehl sind neu , ohne gehts auch nicht.
Es handelt sich hier um die Standard Receive Funktion aus dem Datenblatt
des ATMEGA168, er bleibt beim 2. Durchlauf der main while(1) hängen,
beim ersten Durchlauf schaltet er die Diode an. Die Receive-Befelhle
werden also ausgeführt. Dann aber sagt er, er findet keine neuen Daten
und bleibt in der while der Rec-Funktion hängen, weil wohl das RXC0 Flag
nicht auf 0 geht.
Danke für Helfe :))