www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Max1228 reagiert nicht per SPI


Autor: Jörn A. (joern_)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich muss ein Max 1228 per SPI mit einem Atmel ansteuern.

Nach langen durchforschen der Datenblätter denke ich sollte es so 
richtig sein aber leider reagiert er nicht!

Hab mal ein Bild angehängt vom Oszi. Leider ist der Max1228 nur im SMD 
0,65mm!!! verfügbar und so weis ich auch nicht ob er das anlöten 
überlebt hat! ich habe mit 290°C und wirklich sehr kurz gelötet und ihn 
auf eine Adapterplatine gesetzt. Verbindungen wurde alle Durchgemessen 
und die Anschlüsse vom OSZI direkt an der Adapterplatine gemessen!

Habe ich Grundsätzlich was falsch gemacht?

Zum Bild:

DO: ~CS
D1: SLK
D2: MOSI
D3: MISO
D4: EOS vom AD


Sinn der Bitfolge:

1. Reset
2. Setup & unipolar (2Byte)
3. Kanal 1 lesen

EOS sollte kurz auf 0 gehen, wenn ein Abarbeitung fertig ist.... leider 
passiert weder das, noch sendet er die erwünschten 2Byte!

Autor: Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo du

ich geb dir ein Tipp: SPI ist einfach nur scheiße!!!

Autor: Jörn A. (joern_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
parallel fällt leider weg wegen der vielen Leitungen!
Hab ich Grundsätzlich was falsch gemacht bei den Bits?

Autor: Jörn A. (joern_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann mir denn wirklich kein Erfahrener helfen? ich habe es mitlerweile 
geschaft, das das EOC (auf Kanal D4) nach der letzten Bitfolge 
signalisiert, das der Befehl erkannt hat. Das Bauteil scheint also zu 
leben!

Muss evtl. der CLK weiterlaufen? wenn ja wie kann ich das mit dem Atmel 
machen.wird ja vom SPI gesteuert!

noch mal zur Bitfolge:

Reset   : 00011000
Setup   : 01101010 & 00000000
Kanal 1 : 10000000

darauf hin sollten 2Byte vom AD kommen, nachdem das EOC (D4) kurz auf 
low war.

Hier meine Routinenen im Atmel:
[Code]
void SPI(void)
{
DDRB = (1<<DDB4)|(1<<DDB5)|(1<<DDB7); // SS, MOSI & SCK output
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1);  // SPI on, Clock 64
}

void ResetAD(void)
{
PORTB=(0<<PORTB4);
//SPDR = 0x18;          //00011000 R mit FIFO
SPDR = 0x10;            //00010000 R
while(!(SPSR & (1<<SPIF)));
PORTB=(1<<PORTB4);
wait();
}

void SetupAD(void)
{
wait();
PORTB=(0<<PORTB4);
//SPDR = 0x6A;          //01101010 Setup,extern Ref
SPDR = 0x66;                        //01100110 Setup intern Ref
while(!(SPSR & (1<<SPIF)));
wait();
PORTB=(1<<PORTB4);
wait();
PORTB=(0<<PORTB4);
SPDR = 0x00;            //00000000 unipolar
while(!(SPSR & (1<<SPIF)));
PORTB=(1<<PORTB4);
wait();
}

void Kanal1(void)
{
PORTB=(0<<PORTB4);
SPDR = 0x80;          //10000110 Kanal 1
while(!(SPSR & (1<<SPIF)));
PORTB=(1<<PORTB4);
wait();
PORTB=(0<<PORTB4);
while (!(SPSR & (1<<SPIF)));  // Warten auf Daten
Daten1 = SPDR;
while (!(SPSR & (1<<SPIF)));  // Warten auf Daten
Daten2 = SPDR;
PORTB=(1<<PORTB4);
wait();
}

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

SPI ist nur ein Schieberegister, bei dem 8Bit im Master und 8Bit im Slve 
zum Ring geschaltet ains und das mit dem Takt des Masters geschoben 
wird.
Wenn Du also was empfangen willst, mußt Du den Takt liefern.

Üblicherweise sendet man dazu ein Dummy-Byte. Das wird dann in den Slave 
geschoben und dieser schiebt zeitgleich seine 8Bit in das 
Empfangsregister des Masters.

Gruß aus Berlin
Michael

Autor: Jörn A. (joern_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok vielen Dank.

also nachdem ich den "letzten Befehl" zum Abfragen gesendet habe, sende 
ich, nachdem das EOC kam einfach noch mal 1 Byte. parallel dazu empfängt 
der Atmel über Miso das Byte vom AD und das ganze noch mal fürs 2te 
byte..

werde das ganze morge früh mal testen. vielen Dank

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.