Forum: Mikrocontroller und Digitale Elektronik PIC 16F690 mittels Assembler


von Anfänger (Gast)


Lesenswert?

Hallo Leute,
ich hätte eine Frage zur Programmierung eines Mikrocontrollers(16F690) 
mittels Assembler:
Kann ich mehrere Programme auf den PIC "raufgeben" und mit einem oder 
mehreren Tastern von einem Programm auf das andere switchen? Ich steuere 
nämlich einige LEDS mit dem und möchte jedoch per Knopfdruck andere 
Programme aufrufen. Wenn ja, an welchem Port schließe ich den Taster an? 
Oder wenn ich 3 Taster habe mit denen ich 3 verschiedene Programme 
betreiben möchte???
Danke LG

von Peter D. (peda)


Lesenswert?

Das macht man nicht mit mehreren Programmen.
Das ist ein nur Programm, wo man aus einem Array ein Lauflichtmuster 
auswählt. Dieses wird solange durchlaufen, bis man das nächste auswählt.

Man braucht auch nicht mehrere Taster. Es reicht ein Taster und bei 
jedem Druck wird das folgende ausgewählt und am Ende wieder das erste.

In Assembler ist das aber sehr komplizert, das geht viel besser in C.


Peter

von Anfänger (Gast)


Lesenswert?

Ich habe drei fertige Programme!
Wie kann ich sie kombinieren und mit einem oder drei Taster steuern?
Welche Pins sind für die Taster geeignet?
Könnt ihr mir einige Tipps geben?
Danke auch an Peter, jedoch möchte ich das mit Assembler machen, weil 
die Programme schon fertig sind und ich sie nur kombinieren möchte.
LG Danke

von Meister E. (edson)


Lesenswert?

Hallo Anfänger,

auch wenn du jetzt die harten Satzzeichen auspackst, ich glaube nicht 
dass du auf die Art hier Hilfe bekommst. Deine Aufgabe ist, ein Minimum 
an Eigenleistung vorausgesetzt, auch für Anfänger zu bewältigen.

Die besagte Eigenleistung musst du erstmal bringen, also zumindest 
erklären wie weit du bist und wo du nicht weiterkommst. Wahrscheinlich 
kann ein geübter PIC-Programmierer deine Aufgabe in wenigen Minuten 
lösen, wenn die bestehenden Programme keine besonderen Fallstricke 
enthalten.
Aber, er hat ja nichts davon, also kannst du nur freundlich um Mithilfe 
bitten und den Löwenanteil musst du selber leisten.

Alles klar?

Gruß,
Edson

von Anfänger (Gast)


Lesenswert?

Danke für die schnelle Antwort, jedoch habe ich dieses "Satzzeichen" 
einfach so eingesetzt, aber es hatte keinen besonderen Grund dafür 
gehabt. Ich glaube, dass ich meine Texte recht freundlich formuliert 
habe, aber trotz allem bedanke ich mich für deine mühe, mir beizubringen 
wie man in Foren schriebt.
LG und Danke

von Ottmar K. (wil1)


Angehängte Dateien:

Lesenswert?

Hallo Anfänger,

:-) Nimm nicht alles krumm was im Forum so geschrieben wird.

Doch jetzt zur Sache:

Falls noch nicht geschehen, solltes Du Dir unbeding mal die Seite von 
"sprut" [http://www.sprut.de/index.htm] als Pflichtlektüre zu Gemüte 
führen. Da findest Du fast alle Grundlagen für die Programmierung des 
PIC.

Hier mal meine Tips:

Ganz wichtig: Datenblatt grob überlesen (damit man den Überblick hat), 
dann die interessierenden Stellen genauer nachlesen

Du schreibst am einfachsten eine Interrupt-Service-Routine (ISR) welche 
bei einem Tastendruck aufgerufen wird. Natürlich muss der Taster 
ordentlich entprellt sein. Das kann mittels RC-Kombination, bessr jedoch 
mittels Software geschehen

Selbstverständlich kann die Tasterabfrage auch ohne ISR durchgeführt 
werden. Mit ISR ist aber eleganter und lässt außérhalb des Tastendruckes 
dem µC alle Zeit für andere Aufgaben.

Zum Anschluss des Tasters eignet sich z.B ein Portpin, der die 
Interruptfunktion "Interruptaufruf bei steigender oder fallender Flanke" 
zur Verfügung stellt (RA2). Das entsprechende Bit zum Einschalten findet 
man im

OPTION_REG (Option-Register)
Bit6
INTEDG: Interrupt Edge Select bit
1 = Interrupt on rising edge of RA2/INT pin
0 = Interrupt on falling edge of RA2/INT pin

Register INTCON (Interrupt Control-Register)
bit 4
INTE: RA2/INT External Interrupt Enable bit
1 = Enables the RA2/INT external interrupt
0 = Disables the RA2/INT external interrupt

In der ISR zählst Du einfach die Anzahl der Tastendrucke mit. Nach 
Rückkehr aus der ISR verzweigst Du mittels Abfrage des  Zählerstandes in 
die gewüschte Subroutine, welche das angewählte Muster darstellt. Ich 
würde dies am einfachsten mit einer Tabelle lösen. Das an sich einfache 
Programm geht in Assembler prima zu programmieren.

Als Ideen-Beispiel (Entwurf) habe ich Dir einen Programmablaufplan (PAP) 
beigefügt. Einen solcher empfiehlt sich stets vor dem Erstellen der 
Software zu erstellen und aktuell zu halten. Der PAP kann z.B. mit 
Variablen, Flags usw, grob bis beliebig tief detailliert sein.

Kostensloser Download
[http://www.gso-koeln.de/papdesigner/Download.html]
Siehe auch:
[http://de.wikipedia.org/wiki/Programmablaufplan]

mfG Ottmar

von Ottmar K. (wil1)


Lesenswert?

Hallo Anfänger,

habe ganz vergessen zu sagen, dass Deine 3 Programme die von mir im PAP 
genannten Unterprogramme sind und du diese über das Hauptprogramm 
"Main", so wie im PAP dargestellt verknüpfen solltest. Den doppelten und 
dreifachen Programmcode musst du halt editieren, also bereinigen.

Es ist nicht möglich im PIC 3 Programme wie z.b. in Windows zu laden und 
einfach aufzurufen. Die Programme müssen wie von mir dargestellt zu 
EINEM Programm umgeschrieben werden, was auch großenteils mit drag and 
drop in einer IDE wie MPLAB geschehen kann.

mfg Ottmar

von Anfänger (Gast)


Lesenswert?

Boahh:)
Ottmar ich bedanke mich herzlich für dein Schreiben und ich hoffe, dass 
ich das schaffen werde:)
Vielen Danke für deine Mühe

von Meister E. (edson)


Lesenswert?

Ottmar K. schrieb:
>  Nimm nicht alles krumm was im Forum so geschrieben wird.

Hat er ja nicht. Nach Lektüre deiner Tipps hoffe ich jetzt, dass er auch 
nicht jeden Rat ungefiltert annimmt.

Ottmar K. schrieb:
> Zum Anschluss des Tasters eignet sich z.B ein Portpin, der die
> Interruptfunktion "Interruptaufruf bei steigender oder fallender Flanke"
> zur Verfügung stellt (RA2).

Meine Kritik:

Ein INT als Tasteneingang ist allgemein als schlechte Praxis bekannt. 
Die CPU wird durch einen prellenden Taster und damit häufig auftretende 
Interrupts unnötig ausgebremst. Eine Wartezeit innerhalb einer ISR ist 
zum Zwecke der Entprellung eine Holzhammermethode, die massive 
Latenz-Zeiten einbringt. Hardware-Entprellung ist ineffizient, weil man 
das eben leicht in SW erledigen kann.

Mein Tipp:

Tasten kommen an einen einfachen Portpin, in einer Timer-ISR können dann 
Abfrage und Entprellung vorgenommen werden. Der entprellte Signalzustand 
wird über das RAM ans Hauptprogramm gegeben. Ganz einfach.

Für die Aufgabe des TE brauchen dann nur die Einsprungpunkte der 
Unterprogramme in der Hauptschleife so angeordnet werden, dass je nach 
Tastenzustand (oder Zählerstand, wie du es beschrieben hast) das 
korrespondierene Programm ausgeführt wird.

Gruß,
Edson

von Ottmar K. (wil1)


Lesenswert?

Hallo Anfänger,

Meister Eder schrieb:
> Tasten kommen an einen einfachen Portpin, in einer Timer-ISR können dann
> Abfrage und Entprellung vorgenommen werden. Der entprellte Signalzustand
> wird über das RAM ans Hauptprogramm gegeben. Ganz einfach.

Da hat Meister Eder schon recht, vergiss meinen Vorschlag und nimm den 
seinen!

mfg Ottmar

von Anfänger (Gast)


Lesenswert?

Danke an euch beiden :)

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.