Timer für PIC18F4550

OP #458463
Lesenswert?

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?
Gast #458466
Lesenswert?

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
Gast #458500
Lesenswert?

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?
Gast #458510
Lesenswert?

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.
OP #458526
Lesenswert?

@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.
Gast #458543
Lesenswert?

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.
Gast #458712
Lesenswert?

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?
OP #458971
Lesenswert?

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.
Gast #459073
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren