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!
parallel fällt leider weg wegen der vielen Leitungen! Hab ich Grundsätzlich was falsch gemacht bei den Bits?
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();
}
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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
