Hallo!!!
Ich bin gerade daran eine längere AD-Wandlung zu machen welche gefolgt
wird von einer SPI-Übertragung zu einem anderen Controller.
Das ganze wird von einer 2 Werte AD-Wandlung nochmal gefolgt.
Wenn die Endlosschleife, in der diese Programmabfolge steht, zum 2. mal
durchlaufen wird sendet die Spi nicht mehr.
Ich habe daraufhin mehrere Versuche gemacht, nachgelesen usw. und bin
dann durch probieren darauf gekommen, wenn die AD-Wandlung nach der
SPI-Übertragung weggelassen wird läuft es.
Kann mir da jemand weiterhelfen?
Ich weiss echt nicht an was das noch liegen könnte.
MfG
Benjamin
< beliebigen Glaskugelwitz einfügen >
wie wär's mit ein bischen mehr Infomationen für die, die dir helfen
sollen/könnten ?
z.B.:
welche(r) Controller/Programmiersprache/Compiler/ADC/µC-Takt/etc?
Ich hab da scheinbar mehr Fragen als du ;)
Sorry verwende einen ATmega8l , programmiere ihn in C (AVR Studio) und
er hat einen CPU Takt von 3,6864 MHz.
Ist ein komisches Problem, da der erste Durchlauf funtioniert und beim
2. Durchlauf bleibt er stehen, s.o.
MfG
Benjamin
- gibtst du auch ein bischen Code zum anschauen heraus?
- hast du das Problem mit der Hardware oder dem Simulator (der ja seine
eigenen Fehler hat) ?
Denn, wenn das ein ganz gewöhnliches Problem wäre, hättest du doch
bestimmt mit der Foren-suche eine Lösung gefunden ;)
Benjamin wrote:
> Controller 2 mit UART funtioniert einwandfrei und die Übertragung der> Werte über die SPI an Controller 2 auch (allerdings nur beim ersten> mal).
Woher willst Du das wissen ?
Wenn ich Dein Programm richtig verstehe überträgt es nur den String
"123456789".
> Hier nun der wichtigste Sourcecode-Ausschnitt:
Ja, da jubeln hier alle, daß sie wieder mal rumraten und sich
totscrollen dürfen.
Wozu gibt es den "Dateianhang" ?
Richtig, damit man einen kompilierbaren (kein PDF, JPG usw.)
abgespeckten (aller rauskommentierter Code entfernt), kommentierten
Sourcecode postet, der den Fehler enthält (geprüft).
Peter
OK, solchen Code hatte ich nicht erwartet/erhofft :(
Was macht dieses Programm eigentlich ?
Es bleibt nämlich nicht viel übrig, falls die Compiler optimierung
eingeschaltet wird (z.B. leere Schleifen, "0<<n").
es gibt hoffentlich ISRs für den/die?! Timer?
... (sry, aber mir fehlen die Worte)
>/*Set MOSI and SCK output, all others input */>DDRB |= (1<<PINB3)|(1<<PINB5);
setze den SS PIN auf ein definiertes Level am besten Output sonst
schaltet der Controller in den Slave Modus und wartet (datenblatt lesen)
for(y=0;y<3000;y++);
Ich weiß nicht von wann dein C-Buch ist (1980/85?)
sowas funktioniert schon lange nicht mehr
for(y=0;y<3000;y++); heißt mache 3000 mal nichts
3000 mal nichts machen ist genauso wie nichts machen, damit fällt das
weg!
zum Rest des Programmes fehlen mir auch die Worte
damit du dir nicht so angemacht vorkommst:
bei Problemen sollte ein Programm gepostet werden, dass:
1. nur die Teile enthält, die Probleme machen (in deinem Fall ohne
Timer!)
2. kompilierbar ist (also Headerdateien, Makros, main() und alle
aufgerufen Funktionen oder Dummies)
3. sollte die Schaltung beschrieben werden (was hängt an PB1 und PB0?)
Ich hab mal ein Prog angehängt, dass einen ADC-Wert misst und dann 1 2 3
4 ... per SPI sendet, vor dem Senden wird ein Pin auf 0 gesetzt und
anschließend wieder auf 1 (wie eben ein klassischer \slaveselect)
( mir stürzt allerdings der Simulator ab, wenn ich die Optimierung
anschalte :(, bei -O0 geht's aber )
Entschuldigung, dass "wir" erwarten, dass der Fragensteller mitdenkt
Werde mich nächstens an die "Regeln" halten.
Danke für die Tipps und das Beispielprogramm, hat mir sehr geholfen.
Mein Problem lag in dem SPI teil des Programms.
Danke nochmals!!!
MfG
Benjamin