SPI Problem bei Power on

Gast #2572281
Hallo,

ich habe ein - mir unerklärliches - Problem:

Ich habe einen ATMega2560 Controller. An der SPI Schnittstelle hängen 
zwei AD-Wandler und eine SD-Karte. Ich hatte alles schon am Laufen, 
sprich Analogwerte auslesen, Gain- und Offsetwerte auf SD-Karte 
speichern.

Jetzt habe ich eine neue Platine bekommen, bei der dieser Teil der 
Schaltung gleich geblieben ist und nun funktioniert nichts mehr, also 
zumindest nicht sofort!
Wenn ich die Spannung auf mein Board gebe funktioniert alles außer die 
SPI-Schnittstelle (AD-Wandler auf 65535 und SD-Karte wird nicht 
gelesen). Wenn ich den Controller dann resete, dann startet er neu und 
alles funktioniert!?!?!?!?

Hat schon jemand soetwas erlebt bzw. hat jemand einen Hinweis woran es 
liegen könnte?

Softwarefehler schließe ich aus, da nach einem Reset ja alles 
funktioniert. Einen Hardwarefehler seh ich aber auch nicht, da nach 
einem Reset ja alles funktioniert....

Bin für jede Antwort dankbar!

Gruß
(Firma: matzetronics) #2572366
Klingt mir danach, als ob die Peripherie beim Aufbauen der 
Versorgungsspannung mehr Zeit braucht, als deine Reset Routine ihnen zur 
Verfügung stellt. Evtl. sind die Fuses im Mega auf zu schnell gestellt? 
Ansonsten füg einfach noch eine kleine Warteschleife im Reset ein.
Gast #2573100
Danke für die schnelle Antwort.
Also die Fuses im Mega sind wie folgt gesetzt:

BODLEVEL = 4V3
OCDEN = [X]
JTAGEN = [X]
SPIEN = [X]
WDTON = [ ]
EESAVE = [ ]
BOOTSZ = 2048W_1F800
BOOTRST = [X]
CKDIV8 = [ ]
CKOUT = [X]
SUT_CKSEL = EXTXOSC_8MHZ_XX_16KCK_65MS

EXTENDED = 0xFC (valid)
HIGH = 0x1A (valid)
LOW = 0xBF (valid)


Ich betreibe den Mega mit einem externen 16MHz Quartz. Das ist ja die 
längste einstellbare Zeit über die Fuses...

Die Idee mit der Warteschleife im Reset ist gut, nur wie realisier ich 
das?? Wo kann ich auf die Reset-Time zugreifen?

Danke!
Gast #2573121
ok, das ist ein einfaches delay, das hätt ich auch noch hinbekommen....

Ich dachte es gibt noch eine Möglichkeit das "Anlaufen" des Controllers 
zu verzögern. Im Datenblatt gibt es eine Time-out period t(TOUT). Ich 
dachte es gibt vielleicht eine Möglichkeit über diese ein delay in den 
Reset zu geben...
Gast #2573175
Danke Peter, aber auf das habe ich geachtet (glaube ich zumindest):
1
int main(void)
2
{  
3

4
//******** Port definitions
5
  DDRH |= (1 << PH4) | (1 << PH5);                  //Channel Select
6
  PORTH |= (1 << PH4) | (1 << PH5);                  //No device selected
7
  DDRH |= (1 << PH2) | (1 << PH3);                  //External ADC RESET Ports
8
  PORTH |= (1 << PH2) | (1 << PH3);                  //External ADC RESET Ports
9
  DDRB |= (1 << PINB2) | (1 << PINB1) | (1 << PINB0);          //Set MOSI, SCK and /SS ouput (SPI-MODE)
10
  DDRL |= (1 << PL4);                          //Output for PWM
11
  
12
//******** UART init (PD2 -> RXD, PD3 -> TXD)
13
  UCSR1C |= (1<<UCSZ10) | (1<<UCSZ11);
14
  UBRR1H = (BAUD_PRESCALE >> 8); 
15
  UBRR1L = BAUD_PRESCALE;                        
16
  UCSR1B |= (1<<RXEN1) | (1<<TXEN1);
17

18
//******** SPI init
19
   SPCR |= (1 << SPE) | (1 << MSTR) | (1 << CPOL);

Ich tippe mittlerweile auch fast auf das Problem, das Matthias 
angesprochen hat.
Gast #2579134
Hallo,

nachdem ich mich immer ärgere wenn ich einen Thread finde, der das 
gleiche Problem beinhaltet aber dann keine Lösung anbietet poste ich den 
gefundenen Fehler.

Nachdem ich also einiges versucht habe, bin ich bei der SD-Karten 
Initialisierung hängen geblieben. Und tatsächlich, nach dem Power on 
brauchte die SD-Karte etwas länger auf meine Anfrage zu antworten, viel 
aus der Funktion mit einem Fehler raus (welchen ich noch nicht anzeigen 
ließ) und hat das /SS-Signal nicht wieder auf High gesetzt. Somit hatte 
ich immer zwei Zuhörer bzw. zwei Sprecher, die das MISO-Signal irgendwo 
floatend zwischen High und Low hielten.

Somit muss ich Peter recht geben, es lag dann letztendlich doch am /SS 
Pin...

Als Konzequenz habe ich gleich ein Fehler-Handling eingefügt...

Danke (fast) allen für die hilfreichen Antworten!

Gruß

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.