Guten Morgen zusammen, Ich hab ein Problem mit dem verständnis wieso mein Prog. nicht funktioniert. ich benutze einen ATMega 32 und möchte die SPI Schnittstelle einfach ma ausprobieren. zuerst setze ich die MOSI und SCK Pins auf Ausgang das steht in der port.h. Und zwar soll das Programm einfach permanent auf der SPI senden damit ich es mir einfach mit einem oszi messen kann. Also zuerst setzte ich imd SPCR SPI Enable,Master und die spi clock rate. Dann schiebe ich das Datum was ich gesendet haben möchte ich das SPI Data Register. und so wie ich das verstanden hab soll er dann automatisch mit dem Senden beginnen. und in der While schleife wird dann das SPI interrupt Flag auf 1 Überprüft denn wenn die Datenübertragung fertig ist springt er auf 1. Aber warum funktioniert es nicht ? Ich seh noch nicht ma den Clock. Einfach Led steuerungen funktionieren also ich kann sagen das der µC ohne probleme Programmiert wird. int main (void) { #include "Port.h" //Port Zuweisungen while(1) { SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR0); SPDR = 0b10101010; while(!(SPSR & (1<<SPIF))); }}
Achja Ich weiss nicht ob das wichtig ist aber ich habe die ganzen SPI leitungen nirgendwo angeschloßen ich will da einfach nur mitm oszi dran
ahhh ich hab mein Problem gefunden und Zwar war der /SS auf eingang gesetzt aber hatte keinen Pullup also war er warscheinlich low und wenn der /SS auf LOW ist dann schaltet sich die Master SPI ab und er sendet nciht .... -.-. So Jetzt sehe ich schonmal den Clock auf der Leitung und auf der Mosi Leitung ist das Signal aber nur mit einer Stärke von 50mV . mhm mal gucken woran das liegt hat da einer ne Ahnung ?
Nein auf der ClockLeitung sehe ich auch die 0V und +5V immer hin und her springen - das Clock signal halt. und am MOSI sehe Ich auf einem 50 Hertz Signal mein "eigenes" Signal von der MOSI leitung mit nur ca 100mV Stärke ?! woran liegt denn das ?
>und am MOSI sehe Ich auf einem 50 Hertz Signal mein "eigenes" Signal von >der MOSI leitung mit nur ca 100mV Stärke ?! Da hältst du wahrscheinlich nicht richtig dran. Das klingt nach kapazitiver Einstreuung...
Neben deinem eigentlichen Problem mal was anderes: Es ist schon extrem unorthodox, eine Header-Datei innerhalb einer Funktion zu includen. Je nach Inhalt kann das auch in die Hose gehen. Mache es lieber dort, wo es alle machen, nämlich gleich am Anfang der C-Datei.
Mit nem PullUp hab ich es auch schon versucht einfach 100k gegen 5 Volt aber dann ist das signal halt nur um 5 Volt geshiftet. Also keine Besserung. Und ich drück schon fest genuch drauf ^^ wenn ich fester drück dann gehts durch den sockel :P. Dat versteh ich net ... Muss man vieleicht noch in irgend einem Register ein bit setzen oder so ? Wenn ich doch das Clock signal sehe dann bin ich doch auf jedenfall im Master modus vom µC oder ?
Mal den Sockel durchgemessen? Hab in letzter Zeit mehrfach festgestellt das der Sockel für den Pin hin war und der Pin also nicht auf der anderen Seite am Sockel anlag (elektrisch gesehen).
Grad mal eine neue Platine aufgebaut mit einem neuen Sockel aufgebaut haargenau das gleich problem ;/
Und der PIN geht sauber? Ich weiß nicht wie das bei dem Chip ist beim At898253 zum Beispiel liegen an allen Pins High-Signal an wenn der Reset gedrückt ist. Also vl mal manuell ohne SPI den Pin auf High ziehen? Und er ist als Out definiert?
Die Masse vom oszi ist auch an der schaltung dran denn ich seh auch das Clcok signal perfekt so wie es sein soll. Auch der Preskaler den ich fuer den CLK eingestellt hab funktioniert. Ich hab auch schon einen Ganz frisch gekauften MEga 32 reingesteckt aber genau das gleiche problem. oder stimmt was mit der software nicht ? koennte da der fehler liegen ?
> zuerst setze ich die MOSI und SCK Pins auf Ausgang das steht in der > port.h. Heißt das, dass du dort den Code drin hast für die Konfiguration der beiden Pins? Dann bitte mal posten. Sieht für mich nämlich so aus, als ob MOSI nicht auf Ausgang geschaltet ist.
Das steht im port.h
1 | DDRB = 0xd0; |
2 | //PORTB = 0xff;
|
3 | |
4 | DDRD = 0xf0; //PD0:PD3 Input PD4:PD7 Output. |
5 | PORTD = 0xf0; //int. Pullup für PD4:PD7 on. |
Moment ich seh grad das da ein fehler vorliegt und zwar entspricht 0xd0 ja 1101 was soiviel heist wir OUT OUT IN OUT und das sollte falsch sein. ich teste ma grad was
Schneller toasty wrote: > Moment ich seh grad das da ein fehler vorliegt und zwar entspricht 0xd0 > ja 1101 was soiviel heist wir OUT OUT IN OUT und das sollte falsch sein. Richtig, du hast MISO als Ausgang und MOSI als Eingang. ;-)
Jo crap grad geändert und nu gehts AAHHHHHHHH ^^. Ich hab auch vorher immer PICs Programmiert und die haben es so wenn man eine 0 im DDR hat dann ist das ein Output und eine 1 ist ein Input - bei atmel isset genau anderes rum und beim drüberschauen hab ich das natürlich vergessen
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.