Forum: Mikrocontroller und Digitale Elektronik anderer Takt -> weder Uart noch SPI gehen?


von Schorsch (Gast)


Lesenswert?

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

von Hans (Gast)


Lesenswert?

Schorsch schrieb:
> wieso geht es einmal und ein anderesmal
> nicht?

Manchmal ist das halt so. Mach Dir nicht draus.

von HFF (Gast)


Lesenswert?

Hallo,

so triviale Dinge wie die Fuses richtig zu setzen und sowas wie F_CPU
richtig zu setzen sind aber alle schon beachtet worden?

von Daniel C. (cecky)


Lesenswert?

Hallo,

ohne mir jetzt den Code angeschaut zu haben, würde ich erst einmal mal 
einen anderen Keramikschwinger nehmen. 16MHz und 115200 Baud ergeben 
laut Datenblatt 3,5% Fehler.
Oder du setzt die Baudrate mal runter. Bei 19200 Baud sind es nur 0,2%.

Cecky

von Schorsch (Gast)


Lesenswert?

Hallo,
vielen Dank erstmal für die vielen Hinweise

ich versuche gerade eine andere Herangehensweise:

der FTDI schafft angeblich 3MBaud !!!

mit meinem alten Aufbau schaffe ich tatsächlich 230400baud. Da dachte 
ich mir, jetzt packste mal nen graden Takt rein (8MHz) und versuche 
250000Baud oder 500000Baud.

scheint auch alles so rauszukommen wie es soll (mit logikanalysator 
überprüft), nur kommt mein so heiß geliebtes screen terminal programm 
nicht mit diesen baudraten klar, sobald ich eine untypische baudrate 
eingebe setzt er alles auf 9600baud zurück ... uagh

Kann ich das screen irgendwie beibringen? Wie macht ihr das?
mit termios klappts bis jetzt auch noch nicht...gibts da auch nen tipp?

Aso, ich benutzt Mac Os X.6.8

Danke Schorsch

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
Noch kein Account? Hier anmelden.