USART Probleme mit Receiver, bleibt in schleife hängen, AD7687

(Firma: Student) #3999291
Lesenswert?

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 :))
Gast #3999527
Lesenswert?

Nikolai Ehrhardt schrieb:
> ich nutze dden USART im MSPIM, dieser ist auch korrekt konfiguriert,
> denn einen DAC kann ich bereits ansteuern.

Das glaube ich dir nicht.

Zitat:
"Serial interface SPI®/QSPI™/MICROWIRE™/DSP-compatible"

Lies das Datenblatt des AD7687. Dessen Interface ist SPI, konkret SDI, 
SDO, SCK und CONV. Da ist ein USART wirklich nicht geeignet, es sei 
denn, man kann ihn zum SPI Interface umprogrammieren.

Abgesehen davon ist das ein 250 kSamples/s ADC und ich befürchte, so ein 
ATmega168 ist für diesen ADC ein bissel zu langsam.

Also, dein Fehler ist (wie ach so häufig), daß du die Unterlagen zu 
deinem Chip nicht gelesen hast.

W.S.
Moderator (Firma: Titel) Persönliche Seite #3999543
Lesenswert?

W.S. schrieb:
> Da ist ein USART wirklich nicht geeignet, es sei denn, man kann ihn zum
> SPI Interface umprogrammieren.
Kann man.

> Fehler ist (wie ach so häufig), daß du die Unterlagen zu deinem
> Chip nicht gelesen hast.
Siehe Anhang...

> Abgesehen davon ist das ein 250 kSamples/s ADC und ich befürchte, so ein
> ATmega168 ist für diesen ADC ein bissel zu langsam.
Macht doch nichts. Langsamer geht immmer...

spess53 schrieb:
> Aber ob die ARDUINO-Software das auch kann?
Ratestunde? Glaskugel? Ach so: USART_Receive()...USART_Flush()...
Angehängte Dateien:
(Firma: Student) #3999792
Lesenswert?

Ich habe nun ersuche gemacht mit

    USART_Transmit(0b00000000);
    cnv_data[0] =
    USART_Receive();
    USART_Transmit(0b00000000);
    cnv_data[1] =
    USART_Receive();


dann läuft die Schleife durch, ist das nun standard so, dass so ich so 
tun muss als ob ich was sende, damit der Takt zum Lesen anspringt, 
scheint Forschungsthema zu sein...

Im Application Note, steht sowas ähnliches ...

Eigentlich sagt er im Datenblatt, dass Takterzeugung für R/T ist.
Also das kann es doch nicht sein?
Gast #3999813
Lesenswert?

Nikolai Ehrhardt schrieb:
> Eigentlich sagt er im Datenblatt, dass Takterzeugung für R/T ist.
> Also das kann es doch nicht sein?

Doch doch ...

Im SPI Mode gibt es nur einen Takterzeuger, und das ist der Master.
Mit dem Aufruf USART_Transmit(..) erzeugst du ein Clock Paket
das den Slave veranlasst seine Daten auszugeben. Et voilá, dann
kannst du die Daten im Receive Register abholen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren