Forum: Mikrocontroller und Digitale Elektronik PIC18F4620 Timer2 für SPI und PWM ?


von DirkF (Gast)


Lesenswert?

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

von Master S. (snowman)


Lesenswert?

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.

von Dirk F (Gast)


Lesenswert?

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

von Lehrmann M. (ubimbo)


Lesenswert?

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?

von Master S. (snowman)


Lesenswert?

> 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.

von DirkF (Gast)


Lesenswert?

>>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.

von Master S. (snowman)


Lesenswert?

wenn du's so gut weisst, warum fragst du dann?!? ich klink mich hier 
raus. bye.

von Carsten S. (dg3ycs)


Lesenswert?

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

von Lehrmann M. (ubimbo)


Lesenswert?

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.

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

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

von Dirk F (Gast)


Lesenswert?

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

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.