Hallo, ich muss einen Clock (1MHz) erzeugen der an einem PortPin des PIC18F4550 ausgegeben wird, bei jeder steigenden Clockflanke soll ein Interrupt ausgelöst werden. Das Board wird mit 48 MHz betrieben. Welchen Timer brauche ich (es gibt ja T0, T1, T2 und T3)bzw. gibt es irgendeinen Beispielcode oder kann mir irgendwer grob die notwendigen Befehle die ich setzen muss erklären?
du kannst ein PWM generieren mit 1MHz (50% duty-cycle), dann brauchst du keinen interrupt (sparst rechenleistung). ich glaube für PWM ist der T2 zuständig (ev. kann dein PIC auch 2 PWMs machen), bin aber nicht sicher; guck mal im datenblatt unter CCP nach. -> von Microchip gibts auch ein PDF, in dem alle diese funtkionen vorprogrammiert sind, dann musst du sie nur noch konfigurieren... du kannst natürlich auch eine interrupt-routine schreiben, für einen überlauf eines timers (egal welchen) und die interrupt-routine toggelt dir ein pin
ich meinte: ...PDF, in dem alle vorprogrammierten funtionen beschrieben sind.
> du kannst natürlich auch eine interrupt-routine schreiben, für einen > überlauf eines timers (egal welchen) und die interrupt-routine toggelt > dir ein pin Genau das habe ich vor allerdings überhaupt keinen Plan wie ich das machen soll.
In einem Interupt kann mann keine 1MHz frequenz erzeugen! Du hast gerade mal zeit 6 Befehle (500ns) auszuführen bevor du es wieder toggeln muss! und um in einer ISR zu gelangen braucht man mehr als 6 Befehle. Es würde nur gehen als PWM ausgang (CCP module). Da ist es möglich eine 1MHz / 50% signal zu erzeugen ohne jeglicher Software overhead. Warum muss bei jeder Flanke ein interupt ausgelöst sein?
es gibt zwei möglichkeiten ein pin zu toggeln: 1. PWM 2. zähler mit interrupt: jeder zähler kann so konfigureiert werden, dass er einen interrupt auslöst, wenn er vom max. zählerstand wieder auf '0' zurückfällt. jeder zähler kann mit einem (start-)wert beschrieben werden. bsp. nehmen wir an, du hast einen zähler, der bis 255 zählt und du startest ihn mit 205. also hat dieser nach 50 "tackten" 255 und lösst dann einen interrupt aus. in diesem interrupt, setzt du den zähler wieder auf 205 und toggelst den pin. btw: musst halt gucken, wie du den zähler konfigurierst etc.
ps: zu dem, was ich zum interrupt oben geschrieben habe: das geht natürlich nur bis ein paar kHz - denn wie bereits erwähnt, hätte man bei 1MHz (offenbar) nur 6 befehle zur verfügung
@Castlerock Ich habe 16Bit die ich bei jeder steigenden Clockflanke um ein Bit weitershiften muss, d.h. bei jeder steigenden Flanke geht ein Bit aus dem PIC raus. Gibt es zum PWM irgendwelche Beispiele, ich kann man einfach nix darunter vorstellen wie ich das machen soll.
du bist wirklich an der Grenze mit einem PIC18 wenn mann 1MHz clock und data nur über software routine einen Pin toggeln will. Vieleicht solltest du mal die dsPICs untersuchen (die können bis 30MIPS, also 3x schneller). Was du vor hast hört sich an wie SPI. vieleicht lässt sich sowas realizieren. Clock out mit PWM, data out mit SPI module. oder nür über denn SPI module (MSSP) machen (der kann 10Mbps). für PWM beispiele kenn nicht all so viel, aber schau mal nach bei Microchip>App.Notes ; AN594, AN564, AN539.
ja, sag mal, was du möchtest ...deine worte von bit raus-shiften tönt schwer nach SPI, dann kannst du dir das ganze PWM- und interrupt-zeug vergessen, das geht viel einfacher dann mit SPI. -> was möchtest du schlussendlich machen?
Vielen Dank erstmal für die Hilfe, habe heute nochmals nachgefragt und dabei ist herausgekommen, dass es überhaupt nit notwendig ist mit 1MHz zu arbeiten und ich keine Zeitvorgaben habe, bis etwas anliegen muss. D.h. ich kann auch einen Timer verwenden der beim Überlauf einen Interrupt auslöst und mir meinen PortPin zwischen 0 und 1 schaltet.
naja, wie du meinst. aber wenn du eine elegante lösung möchtest, sind wir hier gerne bereit dafür eine lösung zu finden. es macht z.b. keinen sinn ein byte via interruptroutine aus einem portpin rauszuschicken, wenn es dafür eine fertige hardware im PIC gibt...
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.