Hallo zusammen,
ihr wisst ja sicher wie das ist, man bastelt mit den Teilen die man
gerade so findet was zusammen, alls geht, dann ätzt man sich eine
Platine, nimmt die Teile die am besten geeignetsten scheinen und wundert
sich warums jetzt nicht mehr geht - genau das ist mein Problem....
Ich habe mit einem 7.3nochwas MHz Quarzoszillator eine Schaltung in
meiner Conrad Steckplatine zusammengesteckt, die im wesentlichen SPI
Signale in den UART übersetzen soll. Für den UART verwende ich einen
FTDI-Chip, der Controller ist ein atmega8. Meine schicke neue Platine
hat jetzt einen 16Mhz Keramikschwinger und nichts geht mehr...
Nichts heißt im Detail:
UART über screen geht noch (115200baud)
UART über meine Auslesesoftware mit fcntl und termios geht nicht mehr
SPI ... folgendes Beispiel
1 | char out[8];
|
2 | SPDR = 0xff;
|
3 | while (!(SPSR & (1<<SPIF))){}
|
4 | sprintf(out,"%d",SPDR);
|
5 | uart_puts(out); // den schafft er noch - Wert ist immer 0
|
6 | SPDR = 0xff;
|
7 | while (!(SPSR & (1<<SPIF))){}
|
8 | sprintf(out,"%d",SPDR);
|
9 | uart_puts(out); // den schon nicht mehr, bleibt im while-loop hängen
|
Ich weiß nicht, ob das UART und das SPI-Problem miteinander verknüpft
sind oder nicht. Sollte der FTDI die Abweichung von >1% kompensieren
können?
Acho, hier ist die Init-Routine für SPI:
1 | SPCR = _BV(SPE) | _BV(MSTR) | _BV(SPR0);
|
2 | DDRB = _BV(PB2) | _BV(PB3) | _BV(PB5);
|
Habe mir mit nem Logic Analyser die UART und SPI Lines angesehen. Wenn
nichts ankommt, wird auch hier nichts angezeigt. D.h. insbesondere die
SPI-Clock geht nicht raus - wieso geht es einmal und ein anderesmal
nicht?
Danke vom Voraus
Schorsch