Forum: Mikrocontroller und Digitale Elektronik Zwei Prozeduren im PIC gleichzeitig -Anfängerfrage ;-)


von Björn Gerber (Gast)


Lesenswert?

Hallo erstmal!

Habe erst vor kurzem mit dem PIC Programmieren angefangen und habe
jetzt mein erstes "großes" Projekt.

Dieses möchte ich mit dem PIC16F84A lösen, da ich fast alle Ausgänge
benutzen muss.

Ich muß für einen Kumpel eine Schaltung entwerfen, die LED´s aufblitzen
lässt und andere in der gleichen Zeit Dimmt (Pwm).

Jetzt hänge ich an dem Programm Aufbau... Wie kann ich Programmteile
schreiben, die selbstständig laufen und der Pic in der Zeit was anderes
macht (z.B. die LED´s blitzen lässt).

Hat das was mit Interrupt Programmieren zu tun?

Finde irgendwie keine lösung und hoffe mir kann jemand darauf einen Tip
geben!

Schönes Wochenende an alle!

Björn

von Gerhard Gunzelmann (Gast)


Lesenswert?

Hallo Björn

zunächst mal sollte das Projekt mit de, 16F84 Dein letztes sein mit dem
alten Ding. Besser ist der Nachfolger, der 16F627.
Sodann ist das kein Problem was Du machen willst, da die PWM, wenn sie
mal programmiert ist, selber läuft. Der Aufbau des Programms könnte
also so aussehen:

Main:
   call InitPorts ; port Richtungen festlegen
   call SetupPWM  ; PWM programmieren
loop:
   call LedOn
   Delay
   Call LedOff
   Delay
   goto Loop

InitPorts:
 ...
   return

...

END
Wenn Du mit MPLAB arbeitest, solltes Du die Vorlagen (Templates)
verwenden


Gruß
Gerhard

von BioSniper (Gast)


Lesenswert?

Ist das für ein Floatarium ?

mfg

von Martin (Gast)


Lesenswert?

@Gerhard:

Wenn Du hättest könntest Du hilft ihm bestimmt nicht, denn er
hat nicht und kann deßhalb auch nicht ;-)

@Björn

Unabhängig davon das Gerhard mit dem 16F627 recht hat (der ist
moderner, und kann PWM IMHO aber nur für einen Kanal) hast Du
mit Deinem Interrupt recht.
Gehe ich recht der Annahme das Du mehrere LEDs dimmen willst? Dann
benötigst Du ja sogar mehrere PWM Ausgänge. Grundsätzlich ist das so
das Du den Timer0 z.B. 1000 Interrupts pro Sekunde erzeugen lässt. In
der Interrupt Routine zählst Du dann wie viele Interrupts die LED schon
an war und wie lange sie ausgeschaltet sein muß. Das kannst Du
dann auch gleich für mehrere LEDs machen. Diese Interrupts laufen dann
quasi "nebenher", so das Du in der Hauptschleife andere Dinge machen

kannst. Nur daran denken das die Interruptbehandlung der Hauptschleife
Rechenzwit abzweigt, das sollte aber bei ein paar blinkenden LEDs kein
Problem sein.

Gruß
  Martin

von B. Gerber (Gast)


Lesenswert?

@all>  Danke erstmal für eure Antworten! Konnte mich vorher noch nicht
melden, da ich gestern auf einer Hochzeit war!

@Gerhard Gunzelmann>  Werde mir dann, wenn ich die gekauften zwei IC´s
verbaut habe die neue Version zu legen! Wenn ich diesen dann habe,
werde ich bestimmt deinen Programm aufbau gut gebrauchen können. Danke
für die Tip´s!

@ BioSniper> Nein, es ist für eine LightShow eines Modell Auto´s!

@Martin> Ja, ich möchte mehrere LED´s dimmen können! Werde also den
Timer0 so benutzen, wie Du es beschrieben hast. Mit der
Interrupt-Routine... Habe mir das mal durchgelesen und fand nur was
über Eingänge abfragen (H/L) und dann ein Unterprogramm aufrufen lassen
und wieder zurück springen! Kannst du mir ein Beispiel geben, wie ich
das schreiben muß, das die Interrupt´s dann "nebenher" laufen?
Wäre echt nett von Dir.

Danke an alle
Bis denn
Björn

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.