Hi zusammen,
ich habe das Problem, dass ich zum einen eine SPI mit geringer Frequenz
(wegen Leitungslängen) und ein PWM erzeugen muss.
Wenn ich das Datenblatt richtig verstehe, dann wird für beide Funktionen
der Timer2 benötigt. OSC/64 ist für SPI zu schnell.
Heisst dass jetzt, dass man beide Funktionen nicht gleichzeitig nutzen
kann ?
Gruß Dirk
aus dem datenblatt kopiert:
SSPM3:SSPM0: Master Synchronous Serial Port Mode Select bits(3)
0101 = SPI Slave mode, clock = SCK pin, SS pin control disabled, SS can
be used as I/O pin
0100 = SPI Slave mode, clock = SCK pin, SS pin control enabled
0011 = SPI Master mode, clock = TMR2 output/2
0010 = SPI Master mode, clock = FOSC/64
0001 = SPI Master mode, clock = FOSC/16
0000 = SPI Master mode, clock = FOSC/4
selbst bei 16MHz FOCS stunde dir somit ein SPI-takt von 250kHz zur
verfügung... und das ist langsam ;-) wenn es doch zu schnell für deinen
SPI-bus ist, würde ich mir gedanken machen, ob SPI wirklich der
geeignete bus ist. und btw: nicht der takt direkt sondern die flanken
sind meistens das problem.
Hi, also mein PIC läuft mit 40MHZ.
SPI Takt ist dann doch 40 MHz / 64 = 625 KHz, oder ?
Wenn ich mir die Signale von Clock und den Daten auf dem Scopemeter
ansehe, dann ist da nix mehr von Rechteck zu erkennen, sondern alles
rund.....
Gruß Dirk
Dirk F schrieb:> Hi, also mein PIC läuft mit 40MHZ.> SPI Takt ist dann doch 40 MHz / 64 = 625 KHz, oder ?
Richtig. Es heißt übrigens kHz und nicht KHz nach DIN 1301.
Master Snowman schrieb:> selbst bei 16MHz FOCS stunde
Es wird noch eine Weile dauern, bis die Atmel-Herrschaften verstehen,
dass man PICs bis 48MHz takten kann (Fosc). Wobei zu bemerken ist, dass
ein Instruktionszyklus 4 Takte benötigt (Fosc/4).
Warum benötigtst du denn so einen hohen Takt? Benötigst du ihn
überhaupts? Was genau (welche Frequenz und Auflösung) benötigst du denn
für deine PWM?
Master Snowman schrieb:> 0011 = SPI Master mode, clock = TMR2 output/2
Hast du das in Betracht gezogen?
> SPI Takt ist dann doch 40 MHz / 64 = 625 KHz, oder ?
dein oszillator (inkl. PLL) mag vielleicht 40MHz sein, aber nicht dein
"arbeitstakt" (der ist bei den PIC18 immer 1/4 des "oszillatortakts").
also liegt dein "arbeitstakt" bei 10MHz (sprich 10MIPS). wenn du den
nimmst für dein SPI-modul und durch 64 teilst, hättest du einen takt von
ca. 156kHz.
>>Warum benötigtst du denn so einen hohen Takt? Benötigst du ihn>>überhaupts? Was genau (welche Frequenz und Auflösung) benötigst du denn>>für deine PWM?
Hallo, ein paar Hz als PWM würden mir für eine Heizungsregelung reichen.
Aber das Problem ist ja, dass man PWM nur mit Timer2 machen kann.
>>"arbeitstakt" (der ist bei den PIC18 immer 1/4 des "oszillatortakts").>>also liegt dein "arbeitstakt" bei 10MHz (sprich 10MIPS).
Nee, es heist ja OSC/64, also 40 MHz / 64.
OSC ist die Oszillatorfrequenz, nicht der Arbeitstakt.
DirkF schrieb:>>>Warum benötigtst du denn so einen hohen Takt? Benötigst du ihn>>>überhaupts? Was genau (welche Frequenz und Auflösung) benötigst du denn>>>für deine PWM?> Hallo, ein paar Hz als PWM würden mir für eine Heizungsregelung reichen.> Aber das Problem ist ja, dass man PWM nur mit Timer2 machen kann.
Dir würden ein paar Hz reichen. OK. Aber DARFST du denn auch nur "Hz"
machen oder verkraftet die Regelung auch "ein paar KHz" Eventuell findet
sich ja ein WErt mit dem PWM und SPI gemeinsam gut laufen?
Also PWM normal eingerichtet und SPI gestellt auf:
> 0011 = SPI Master mode, clock = TMR2 output/2
Alternativ ist bei ein paar HZ und 40Mhz Osc. es doch überhaupt kein
Problem auf das HArdwarePWM Modul zu verzichten und mit hilfe eines der
beliebigen anderen TMR Module und Interrupt eine SoftwarePWM zu
realisieren. Das hat in de rZeit wo es noch keine HArdwaremodule gab
auch prima funktioniert.
>>>>"arbeitstakt" (der ist bei den PIC18 immer 1/4 des "oszillatortakts").>>>also liegt dein "arbeitstakt" bei 10MHz (sprich 10MIPS).> Nee, es heist ja OSC/64, also 40 MHz / 64.> OSC ist die Oszillatorfrequenz, nicht der Arbeitstakt.
Ja- ist richtig!
Alternativ zur Soft-PWM kannst du "bei ein paar" Hz PWM doch auch
einfach eine geringere Oszillatorfrequenz nehmen...
Hilft das nicht musst du einen Baustein aussuchen bei dem SPI und PWM
getrennte Zeitbasen haben.
Mir währe es auch lieber es gäbe diese Probleme überhaupt nicht, leider
gibt es bei wirklich allen µC immer wieder solche "Ausschlusskriterien".
Ach JA:
Dirk F schrieb:> Wenn ich mir die Signale von Clock und den Daten auf dem Scopemeter> ansehe, dann ist da nix mehr von Rechteck zu erkennen, sondern alles> rund.....
Liegt das wirklich an den Signalen oder evtl. auch etwas mit am
Messkopf&Gerät. Und selbst wenn die Signale wirklich "rund" sein sollten
ist das nicht zwangsläufig ein Problem. Es muss nur Gewährleistet sein
das zwischem dem Flankenwechsel von Daten und Clock genug Zeit ist, das
also in dem Moment wenn der Clock Schwellwert überschitten wird der
DAten Wert definitiv jeseits der Unsicherheitsschwelle liegt. Gerade bei
sehr schnellen Signalen wirst du kaum noch echte Rechtecke auf den
Leitungen sehen. Hast du schonmal ausprobiert ob es überhautp läuft -
und wenn nicht das wirklich die Geschwindigkeit das Problem ist und nich
tirgendetwas anders?
Gruß
Carsten
Master Snowman schrieb:>> SPI Takt ist dann doch 40 MHz / 64 = 625 KHz, oder ?> dein oszillator (inkl. PLL) mag vielleicht 40MHz sein, aber nicht dein> "arbeitstakt" (der ist bei den PIC18 immer 1/4 des "oszillatortakts").> also liegt dein "arbeitstakt" bei 10MHz (sprich 10MIPS). wenn du den> nimmst für dein SPI-modul und durch 64 teilst, hättest du einen takt von> ca. 156kHz.
Ja und nein. Der Input auch Fosc genannt (!!!) ist max. 48 MHz bei PIC -
im Beipiel hier 40MHz.
Ein Instructioncycle braucht Fosc/4. Also 40MHz/4 = 10MHz.
Fosc/64 ist aber dann 40MHz / 64 = 625 kHz.
FALSCH ist die Annahme: 10MHz/64, da der Input 40MHz und nicht 10MHz
ist.
Fosc ist der native Input und nicht die geviertelte Taktung.
also laut Datenblatt liegt das so:
der input-Takt für den prescaler ist Fosc/4
prescaler gibt es nur 1:1, 1:4 und 1:16
somit ergibt sich (Fosc/4) * (1/16) = Fosc/64
Hallo,
danke für die zahlreichen Hinweise.
Habe mir jetzt ein Spft-PWM über einen 1ms Interrupt gebastelt.
Kann die Chip Temperatur jetzt auf 40 °C +/- 0,1 °C regeln.
>>Alternativ zur Soft-PWM kannst du "bei ein paar" Hz PWM doch auch>>einfach eine geringere Oszillatorfrequenz nehmen...
Geht leider nicht, da der PIC noch jede Menge andere Sachen machen muss:
- 3 Kanäle ADC 24 Bit auslesen,
- Display ansteuern
- 2 x DAC ansteuern
- UART u.s.w
>>Hast du schonmal ausprobiert ob es überhautp läuft ->>und wenn nicht das wirklich die Geschwindigkeit das Problem ist und nich>>tirgendetwas anders?
Ja es läuft, und darüber bin ich auch froh. Alle o.g. SPI Bausteine
werden in anderen SPI Modus betrieben.
Ich muss also jedesmal umschalten.
>>der input-Takt für den prescaler ist Fosc/4>>prescaler gibt es nur 1:1, 1:4 und 1:16>>somit ergibt sich (Fosc/4) * (1/16) = Fosc/64
Also wir reden hier über 2 verschiedene Sachen, die dummerweise den
selben Timer2 verwenden:
SPI: Den kann man mit FOSC/64 (40MHz/64) oder Timer2 betreiben.
PWM: Der geht nur mit Timer2 und den von Dir genannten Prescalar modes.
Gruß Dirk