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.
wenn du's so gut weisst, warum fragst du dann?!? ich klink mich hier raus. bye.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.