Hi zusammen!
Ich brauche für ein Projekt sowohl die SPI Schnittstelle im
Mastermodus(AD Wandler) als auch einen PWM Ausgang des Atmega8. Die SPI
Kommunikation funktioniert soweit wunderbar.
Nun möchte ich den Timer 1 nutzen um ein PWM Signal auszugeben, dieser
hat ja, wenn ich das richtig verstehe, 2 Ausgänge mit jeweils seperat
einstellbarem "compare match": OC1A und OC1B.
Nun ist der OC1B Ausgang auch gleichzeitig der SS Ausgang/Eingang der
SPI Schnittstelle.
Den Slave Select Eingang des Slaves habe ich schon extra auf einen
anderen Port gelegt (PB0), OC1A und OC1B sind also unbelegt.
Wenn ich nun die Schnittstelle und den Timer gleichzeitig nutze, wird
die Temperatur, die mir der AD Wandler ausgibt, in kurzen,
unregelmäßigen Abständen mehrstellig, es kommen also komplett falsche
Werte an.
Ohne Initialiesierung des Timers als PWM Quelle besteht das Problem
nicht.
Folgendes habe ich schon probiert:
- Slave Select des Masters als Ausgang konfigurieren und unbelegt lassen
-Slave Select des Masters als Eingang konfigurieren und mit PullUp
versehen um im Mastermode zu bleiben
beides ohne Erfolg. Meint ihr Timer und SPI vertragen sich grundsätzlich
nicht?
Gerne poste ich später auch die relevanten Teile des C-Codes, wenn
gewünscht.
Gruß,
Philipp
Philipp schrieb:> Ich brauche für ein Projekt sowohl die SPI Schnittstelle im> Mastermodus(AD Wandler) als auch einen PWM Ausgang des Atmega8.
Wieso muß es denn unbedingt dieser, eher historisch relevante Chip sein?
Aber egal, das war nur ein Gedanke von mir, der mit der Sache eigentlich
rein garnix zu tun hat.
> Nun möchte ich den Timer 1 nutzen um ein PWM Signal auszugeben, dieser> hat ja, wenn ich das richtig verstehe, 2 Ausgänge mit jeweils seperat> einstellbarem "compare match": OC1A und OC1B.
Ja.
> Nun ist der OC1B Ausgang auch gleichzeitig der SS Ausgang/Eingang der> SPI Schnittstelle.
Das ist aber kein Problem. Denn: SPI als Master erlaubt grundsätzlich
die beliebige Konfiguration des SS-Pins, im konkreten Fall wäre
natürlich die Konfiguration als Output zu wählen. In diesem Fall
interesiert sich SPI nicht weiter für diesen Pin oder irgendwas, was
daran passiert, er agiert als reiner GPO-Pin.
Und wird in dieser Eigenschaft dann durch die (hoffentlich korrekte)
Konfiguration des Timers auch gleich wieder ausgehebelt, insofern als
das DDR-Bit "1" ist und der Timer deshalb seinen OC-Output bereitwillig
als "override" an den Pin ausgibt.
> Den Slave Select Eingang des Slaves habe ich schon extra auf einen> anderen Port gelegt
Das ist natürlich zwingend nötig und hast du ja auch richtig gemacht.
> beides ohne Erfolg. Meint ihr Timer und SPI vertragen sich grundsätzlich> nicht?
Nein. Die können definitiv miteinander, wenn man sie korrekt
programmiert.
> Gerne poste ich später auch die relevanten Teile des C-Codes, wenn> gewünscht.
Wenn du selber den Fehler nicht finden kannst, wird das wohl die einzig
verbleibende Option sein: ihn dir von anderen zeigen zu lassen...
Das tatsächliche Problem wird aber vermutlich auf ganz anderer Ebene
liegen...
Danke für die hilfreiche Antwort erstmal, c-hater. Den Code habe ich
übrigens schon vor deinem Post gepostet.
Bisher habe ich die Fehler eigentlich immer selber gefunden und meine
Frage war zunächst ja auch nur ob die sich grundsätzlich vertragen und
der SS Pin im Mastermode so unabhängig ist wie du nun sagst.
Dein letzter Satz ist hoffentlich nicht so gemeint wie ich ihn verstehe.
Philipp schrieb:> Danke für die hilfreiche Antwort erstmal, c-hater. Den Code habe ich> übrigens schon vor deinem Post gepostet.
Du solltest mal ernsthaft über die Probleme und Erscheinungen
nachdenken, die asynchrone Kommunikation inhärent mit sich bringt bzw.
bringen kann...
Wenn du das kapiert hast, bin ich wieder geneigt, weiter auf dein
konkretes Problem einzugehen, dann eben auf den mittlerweile auch für
mich verfügbaren Quelltext. Aber wohl nicht mehr heute.
c-hater schrieb:> Du solltest mal ernsthaft über die Probleme und Erscheinungen> nachdenken, die asynchrone Kommunikation inhärent mit sich bringt bzw.> bringen kann...
Nur das SPI keine asynchrone Kommunikation ist, sondern eine synchrone
@Phillip
dokumentiert ist nichts, dass es da einen Fehler gäbe.
Von daher ist das beschriebene Verhalten seltsam. Bist du sicher, dass
du nicht an anderer Stelle einen Programmfehler hast, der sich nur
zufällig nicht als Symptom auswirkt, wenn du die PWM deaktivierst?
was machst du mit der PWM? Ist es möglich, dass die PWM
elektromagnetisch auf die MOSI Leitung einkoppelt?
Karl H. schrieb:> c-hater schrieb:>>> Du solltest mal ernsthaft über die Probleme und Erscheinungen>> nachdenken, die asynchrone Kommunikation inhärent mit sich bringt bzw.>> bringen kann...>> Nur das SPI keine asynchrone Kommunikation ist, sondern eine synchrone
Ich meinte natürlich auch nicht die SPI-Kommunikation, sondern die
Kommunikation über Webforen. Sehr seltsam, dass du das nicht erkennen
konntest...
Oder bist du etwa ein BOT, der die immer gleichen Inhalte auf bestimmte
Stichworte hin abspult...
Fragen über Fragen...