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.