Hallo zusammen ich versuche mit AVRStudio 4.12 und WinAVR bei einem ATmega644 das SPI interface zum Ticken zu bekommen. Vorerst im Simulator. Jetzt stellt sich aber das Problem ein, dass das SPI Masterbit sofort nach dem setzen wieder gelöscht wird. /SS ist sowohl als Ausgang Konfiguriert als auch "High". Nun dachte ich mir, das liegt sicherlich an dem neuen ATmega644 und hab deswegen auf den ATmega64 umgestellt. Ergebnist: Das gleiche. Seltsamerweise funktioniert der Code, wenn ich auf einen ATmega32 stelle. Hat irgendjemand eine Idee? Hier der Code: #include <avr/io.h> #include <avr/interrupt.h> #include "solar.h" extern void init_LCD(void); int main(void) { int i; char c; // Port Initialisierung DDRA = 0x00; DDRB = 0x00; DDRC = 0x00; DDRD = 0x07; PORTA = 0x00; PORTB = 0x10; PORTC = 0x00; PORTD = 0x07; //SPI initialisierung //SPI Master, fosc/128 DDRB = (1<<PB5) | (1<<PB7) | (1<<PB4); PORTB = 0xB0; PRR0 = PRR0 & 0xFF^(1<<PRSPI); SPCR0 = (1<<SPE0) | (1<<MSTR0) | (1<<CPOL0) | (1<<CPHA0) |(1<<SPR01) | (1<<SPR00); SPSR0 = (1<<SPI2X0); // Hier ist MSTR schon wieder '0' init_LCD(); while(1) { } return 0; }
>Hat irgendjemand eine Idee?
Ja, Du hast das Datenblatt nicht gelesen.
Erst lesen, dann programmieren.
Mann Super! Das ist genau das was ich erhofft habe zu bekommen. Wenn euch die Antwort zu einfach ist, seid einfach still. Ich bin der Meinung, dass ich die Doku gelesen habe. Was genau hab ich denn übersehen?
Sehe kein Problem in Deinem Code. Probier es doch auf dem echten Chip aus. Vielleicht ist es ein Simulator-Problem. Gruß, Stefan
Hallo @Stefan: Danke für Deine Idee. Hat leider nicht geholfen. An den SPI-Pins tut sich gar nichts. Ich werde noch mal weiter suchen. Hat jemand soch mal unterschiede zwischen ATmega32 und ATmega64 bemerkt? Mit einem ATmega 32 funktioniert es nämlich. @Werner Ich hab ein paar Muster über einen Freund bekommen. Der IC ist aber nach meinen Informationen voll in Produktion. Die 324 und 164 fehlen noch.
@Frank? Hast Du eine Debug-Möglichkeit oder brennst Du den mc nur auf Verdacht? Macht init_lcd() ev. Probleme - welche Ports benutzt die Funktion? Welchen Pegel kannst Du an /SS messen? Wenn DU im Simulator arbeitest: verifiziere, dass /SS asl Ausgang bzw. High geschaltet ist. Wie steht das WCOL-Bit vor/nach dem Initialisieren? Ev. kann es was bringen, das WCOL-Bit zurückzusetzen, z.B. mit: volatile uint8_t dummy; ... SPCR0 = (1<<SPE0) | (1<<MSTR0) | (1<<CPOL0) | (1<<CPHA0) |(1<<SPR01) | (1<<SPR00); SPSR0 = (1<<SPI2X0); dummy = SPSR; // setzt WCOL-Bit zurück dummy = SPDR; SPCR0 = (1<<SPE0) | (1<<MSTR0) | (1<<CPOL0) | (1<<CPHA0) |(1<<SPR01) | (1<<SPR00); SPSR0 = (1<<SPI2X0); Viele Grüße, Stefan
Hi! Ich bin mir nicht ganz sicher ob es daran liegt, aber wenn ich mir die Datenblätter ansehe liegen die SPI Pins beim 64er (PB 0 - 3) auf anderen Ports als beim 32er (PB4-7). Gruß Dirk
@Dirk: der 644 ist eher zum ATmega32 als zum ATmega64 kompatibel. Es sind ja auch die Datenblätter 164/324/644 in einem zusammengefasst. Gruß, Stefan
Hallo zusammen. Ich hab den Fehler! Es steckt doch nur im Simulator! Bei meinen Versuchen mit dem realen IC muß ich einen anderen Fehler gemacht haben. Nun zu Fehler beschreibung. Es ist wahr, dass der ATmega644 eher zum ATmega32 verwand ist. Der SPI Port ist beim 644 gleich dem vom 32er. Jetzt haben die für den Simulator anscheinend den 64er zum Vorbild genommen. Soll heißen /SS ist beim 644er auf PB4, beim 64er ist es PB0. wenn ich in meinem Programm den PB0 auch als Ausgang schalte funktioniert alles. Dumme Sache. Hat viel Zeit gekostet. Danke für eure Hilfe!!!! Gruß Frank
Hi Werner, Meine Bezugsquelle für den ATMEGA644 ist Air Electronics: http://www.trade-shop.de/catalog/ Habe eine Info bekommen, dass die heute 100 Stück ins Lager bekommen haben. Preis 9,90. Leider haben die einen Mindestbestellwert von 25. Habe mir 3 Stück bestellt. Gruss Stephan
Hi Frank, wäre nicht schlecht, wenn Du Atmel eine kurze Fehlerbeschreibung zukommen lassen könntest. Federführend bei der AVRStudio-Entwicklung sind meines Wissens die Norweger: http://www.atmel.no/beta_ware/ Schreib denen doch ne kurze Mail mit dem Problem. Viele Grüße, Stefan
Hallo Stefan, ich hab gestern schon ne Mail über den normalen Support-Kanal geschickt. Fürs nächste Mal nehme ich dann den von Dir genannten. Den kannte ich bisher noch nicht. Gruß Frank
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.