Forum: Mikrocontroller und Digitale Elektronik Einsteiger Hilfe zu PIC PIC16F628A


von Sebastian A. (micropoint)


Lesenswert?

Guten Abend,

ich bin neu in der Welt der Mikrocontroller. Ich möchte ein zunehmendes 
Lauflicht bauen, das bedeutet 10 - 15 LED´s sollen nacheinander 
aufleuchten und wenn die letzte LED erleuchtet sollen alle wieder 
erlöschen, dann das selbe von vorne in einer Endlosschleife.

Ich möchte dies mit dem Mikrocontroller PIC16F628A verwirklichen, da ich 
davon schon 2 gekauft habe.

Eine Programmier Platine habe ich bereits und ein Brenner Programm auch. 
Damit muss ich ja einfach nur die .hex Datei auf den Controller Brennen 
oder?

Ich bräuchte Hilfe bei dem Programm da es so eine Masse an verschiedener 
Software und Sprachen gibt, ich habe das Internet schon stundenlang 
durchsucht aber da jeder leider eine andere Meinung hat war die Suche 
erfolglos.

Gibt es ein Kostenloses Programm in dem ich einfach programmieren kann 
und es mir das dann Umwandelt zu einer PIC Controller verständlichen 
.hex Datei?

Wäre wirklich schön wenn ihr mir "verständlich" weiter helfen könntet.

Gruß

Sebastian

von Noch einer (Gast)


Lesenswert?

Praktikabel sind wohl nur Assembler und C. Und eigentlich gibt es nur 
MplabX als IDE. Alles andere am besten erst mal komplett ignorieren.

Ganz egal, welche Sprache du wählst, mal mit den Beispielen auf 
http://www.sprut.de/electronic/pic/ anfangen.

Problem sind die unzähligen Register. Die Sprut Beispiele nach C 
übersetzen ist nicht so schwierig. Später musst du sowieso die 
Assemblerbeispiele aus dem Datenblatt in deine Sprache übersetzen.

von Stefan (Gast)


Lesenswert?

Was für einen Brenner hast du denn ?

von Sebastian A. (micropoint)


Lesenswert?

Aus ebay, K150 Programmer nennt der sich. Mit Brenn Software wo man .hex 
Dateien einfügt.

von Christian M. (Gast)


Lesenswert?

Ein Wunder, dass nicht sogar noch von PIC abgeraten wird. Und nein, AVR 
und C sind nicht das Einzige!

Ich programmiere meine PICs mit MikroBASIC von MikroE. Die haben auch 
einen Pascal und C Compiler. Die freie Version macht bis 2kWorte Code.

Gruss Chregu

von Stefan (Gast)


Lesenswert?

Wenn du mit dem HEX Files direkt
brennen kannst, dann such dir eine Programmiersprache
aus, die dir liegt und dazu das Programm zum schreiben.

Beispiele:

http://www.mikroe.com/
http://www.microchip.com/pagehandler/en-us/family/mplabx/

Das sind so die meist genutzten.
Programmiersprachen:

C
Basic
Assembler
Pascal

oder was es sonst noch gibt.

http://www.mikroe.com/compilers/
Gibt es auch Demos von. Also ausprobieren, was dir liegt.

Foren:
http://www.mikrocontroller.net/forum/mikrocontroller-elektronik
http://pic-projekte.de
Und noch einige mehr.

von WehOhWeh (Gast)


Lesenswert?

Ich würde mir MPLABX und den XC8 Compiler holen - d.h. die PICs in C 
programmieren. C hat den Vorteil, dass sich das erlernte später besser 
auf andere Controller übertragen lässt.
MPLABX hat den Vorteil, dass es kostenlos ist und man relativ viel 
Hilfen findet.

Die IDE und den Compiler gibts hier:
http://www.microchip.com/pagehandler/en-us/family/mplabx/

Such dir am besten bei youtube ein paar Tutorials und schau sie dir an.

Beispiele - in Form von fertigen Projekten für MPLABX - gibts hier:
http://www.microchip.com/pagehandler/en-us/devtools/mla/home.html
Das ist ein guter Start zum "spicken", das geht von ganz einfach bis hin 
zu USB-Devices.

Andere Codebeispiele gitbs direkt Microchip hier:
http://www.microchip.com/CodeExamplesByFunc.aspx

Bei Problemen ist das Microchip Forum einen Blick wert:
http://www.microchip.com/forums/

von ... (Gast)


Lesenswert?

Für den 16F628 kannst auch MPLAB nehmen.
Das sollte viel schlanker als MPLABX sein.

Der XC8 Compiler lässt in MPLAB als Tool integrieren.


Die MikroE-Compiler haben relativ gut ausgebaute Bibliotheken.
Der Haken: Es wird vorrangig die "eigene" Peripherie von
MikroE unterstützt. Und die Bibliotheken sind nicht im
Quelltext verfügbar. In den neuen Versionen wird nicht mal
mehr der Assembleroutput des Compilers für die Bibliotheken gelistet.
(Wie noch beim alten 8er C-Compiler.)


Ich würde Dir eher zum XC8-Compiler raten.

von Toxic (Gast)


Lesenswert?

@Sebastian G.
Bezueglich des XC8-Compiler :
http://pic-projekte.de/wordpress/?cat=13
Ich habe die Webseite nur kurz "ueberflogen",duerfte fuer Dich aber als 
Neueinsteiger interessant sein....

von GroberKlotz (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Sebastian,
also ich habe auch vor einigen Jahren mit NULL Ahnung angefangen, mir 
damals den 16F628 und den Brenner 8 von sprut zugelegt. Beim Brenner 
würde ich gleich sofort den PicKit3-Programmer (billig vom Chinesen) 
zulegen.

Die Seite von sprut [http:\\www.sprut.de] ist weit und breit die beste 
die Du finden kannst, wenn es um das Erlernen von Assembler für PICs 
geht.

Geh einfach frischauf drauf los, lass zuerst 1 LED, dann 2 dann 
schließlich soviel Du möchtest blinken. Arbeite Dich in Assembler ein, 
bis Du die Dich mit den internen Modulen (PORTS, den Timern, 
Comparatoren, der Pulsweitenmodulation, Capture, Interrupt usw) 
einigermaßen auskennst.

Die baldmöglichste Ansteuerung von LCD (HD44780-kompatibel) möchte ich 
Dir besonders empfehlen.

Dann kannst Du Dich bereits dem 16F1827 (18Pin) widmen, der einige 
Module mehr als der 16F628 (bei geringerem Preis!) zu bieten hat . ADC, 
Touchsensor, interner Oscillator bis 32MHz usw, geben Dir ein volles 
Betätigungsfeld.

Wenn Du mal mehr Pins benötigst, dann gib Dich nicht mehr mit den 16F87x 
ab, greife gleich zu den 28/40pin-MCUs wie z.B. 16F1936.

Wenn möglich baue Dir eine Testplatine wie sie bei sprut zu finden ist 
z.B. auf Lochraster auf, dann vermeidest Du evtl. unsichere Kontaktgabe 
und Verdrahtungsarbeit am Steckbrett. Ich füge Dir mal ein Bild von 
meinem, vor Jahren gebauten Testboard als Beispiel bei.

Bei "sprut" findest Du jede Menge Hilfe, Infos und Anregungen vom 
einfachen Blinken einer LED bis zu sehr anspruchsvollen Projekten.

Wenn Du dann Assembler drauf hast und Du das Verlangen nach "C" in Dir 
verspürst, lernst Du eben diese Programmiersprache und kannst 
zeitkritische Programmteile auf Grund Deiner Vorkenntnisse in Assembler 
programmieren.

Pack's einfach an, kannst ja nur gewinnen und keinesfalls verlieren!

mfG GroberKlotz

von Frank K. (fchk)


Lesenswert?

Sebastian G. schrieb:

> ich bin neu in der Welt der Mikrocontroller. Ich möchte ein zunehmendes
> Lauflicht bauen, das bedeutet 10 - 15 LED´s sollen nacheinander
> aufleuchten und wenn die letzte LED erleuchtet sollen alle wieder
> erlöschen, dann das selbe von vorne in einer Endlosschleife.
>
> Ich möchte dies mit dem Mikrocontroller PIC16F628A verwirklichen, da ich
> davon schon 2 gekauft habe.
>
> Eine Programmier Platine habe ich bereits und ein Brenner Programm auch.
> Damit muss ich ja einfach nur die .hex Datei auf den Controller Brennen
> oder?

Besser wäre es gewesen, vorher zu fragen.
Die PIC10/12/16 machen es einem C-Compiler nicht ganz einfach, 
brauchbaren Code zu erzeugen. PIC18 ist besser, und PIC24 und PIC32 sind 
in dieser Hinsicht optimal. Ich hätte Dir für den Anfang einen PIC24 
angeraten, der ist am einfachsten und bequemsten, die 8-Bitter haben da 
so ein paar Eigenheiten, mit denen man erstmal klar kommen muss.

Aber ok, das Kind ist jetzt im Brunnen. Andere Leute haben MPLABX und 
XC8 empfohlen, ich schließe mich dem an.

Dazu ein PICKIT3. Keinen Brenner. Die Dinger sind noch aus der Zeit, als 
es noch kein Flash gab und man die PICs unter eine UV-Lampe zum löschen 
legen musste (oder nur ein einziges Mal brennen konnte). Diese Zeiten 
sind seit 20 Jahren vorbei.

Heutzutage programmiert man Prozessoren direkt in der Schaltung. Da die 
Chips auch von der Bauform immer kleiner werden und damit direkt auf die 
Leiterplatte gelötet werden müssen, geht es auch gar nicht mehr anders. 
Der Vorteil, der nebenbei herausspringt, liegt daran, dass Du mit dem 
PICKIT3 dem Prozessor auch bei der Arbeit zuschauen kannst. Du kannst 
Dir die Speicher und Register anschauen, Du kannst Befehle im 
Einzelschritt ausführen lassen, Stoppunkte setzen usw. Ein Brenner kann 
das prinzipiell nicht. Diese Möglichkeiten solltest Du Dir nicht 
entgehen lassen, Du lernst eine ganze Menge dabei.

fchk

von Noch einer (Gast)


Lesenswert?

Ach was, Pic24 mit MpabX und Pickit3... damit bekommt sogar meine Oma 
ein Mikrocontroller-Programm zum laufen. Echte Programmierer benutzen 
Pic16 und einen Brenner, den die IDE nicht kennt. :-)

von Michael S. (rbs_phoenix)


Lesenswert?

Christian Müller schrieb:
> Ein Wunder, dass nicht sogar noch von PIC abgeraten wird. Und nein, AVR
> und C sind nicht das Einzige!

Du hast ja schon 50 Minuten nach Threaderstellung geschrieben. Warst 
wohl schneller als die hater ;)

Frank K. schrieb:
> Die PIC10/12/16 machen es einem C-Compiler nicht ganz einfach,
> brauchbaren Code zu erzeugen. PIC18 ist besser, und PIC24 und PIC32 sind
> in dieser Hinsicht optimal.

Das mag stimmen. Aber sofern der Compiler alles ausbadet (was er tut), 
juckt es mich weniger, dass er beim PIC18 oder höher weniger arbeit hat.

Meine Empfehlung wäre nen PIC18, z.B. PIC18F25K22 oder PIC18F45K22. 
Finde zum Einstieg ist es ein gutes Mittelmaß zwischen PIC12 oder PIC16 
und den doch komplizierteren 16bitter, geschweige 32bitter. Aber das ist 
ja rein subjektiv.

Zusätzlich dazu die MPLAB X IDE mit XC8. Beides die aktuellsten 
offiziellen Tools. Neue PICs werden wohl nirgends schneller 
implementiert. Und du kannst auch Assembler nehmen, in der gleichen IDE. 
Aus dem selben Grund würde ich dir auch das PICKIT3 ans Herz legen. Das 
musste ich mir auch zwangsläufig zulegen da der Brenner8 ein neuen PIC 
nicht unterstützt hat, das dazugehörige Brenntool auch nicht. Aber das 
hat ja noch Zeit.

Ich nutze aber gerne den MikroC Compiler/IDE. Ist iwie schlüssiger, 
übersichtlicher und besser dokumentiert. Zu ansich jeder Funktion gibt 
es ein Beispiel, zusammen mit Schaltplan. Es hat aber 2 Nachteile.
1. Ist es auf 2kWord begrenzt, wenn man kein Geld ausgeben will
2. Die Bibliothekfunktionen sind nicht einsehbar, geschweige änderbar. 
Ich hatte einmal die I2C Funktionen benutzt und das Programm hat sich 
aufgrund eines fehlenden Pullup Widerstands (vergessen eine Seite 
festzulöten) aufgehangen. Da wollte ich dann ein Timeout einbauen. Ging 
aber nicht.

Ein USB Device zu bauen geht damit aber bedeutend schneller und 
einfacher. Resultiert aber automatisch bei >2kWord Code, somit braucht 
man die Vollversion.

Sebastian G. schrieb:
> aber da jeder leider eine andere Meinung hat war die Suche
> erfolglos.

Das ist hier nicht anders. Hättest du den PIC nicht als musskriterium 
genannt (und selbst dann kommt es idR, daher die Verwunderung), käme 
nicht nur die Programmiersprache sondern auch der uC ansich dazu. Daher 
wirdt du nur Empfehlungen bekommen. Entscheiden musst du. Und ich 
persönlich würde sagen MPLAB C, XC8 (also C), PICKIT3 (später) und 
Datenblatt sowie ERRATA

von GroberKlotz (Gast)


Lesenswert?

Sebastian G. schrieb:
> Gibt es ein Kostenloses Programm in dem ich einfach programmieren kann
> und es mir das dann Umwandelt zu einer PIC Controller verständlichen
> .hex Datei?

Konkret: JA
Besuche doch mal die Seite von microchip:
[http://www.microchip.com/]
Lade Dir die Entwicklungsumgebung (IDE) MPLAB X herunter:
[http://www.microchip.com/pagehandler/en-us/family/mplabx/]
Dann noch das Datenblatt zum 16F628A
[http://ww1.microchip.com/downloads/en/DeviceDoc/40044G.pdf]

Überfliege mal den Inhalt des Datenblatts im Groben. Immer wenn Du Code 
erstellst, liest Du Dir den entsprechenden Abschnitt im Datenblatt genau 
durch. Wenn Du was nicht verstehst frägt Du im Forum oder suchst erstmal 
im Web oder bei sprut.

Mit dem 16F628 kannst Du (ohne Klimmzüge) direkt an den als Ausgang 
verwendbaren Pins PORTB,RB7:RB0 und PORTA RA7:6,RA4:0 insgesamt 15LEDs 
einzeln ansteuern, sofern Du den internen Oszillator (4MHz) verwendest, 
da hierdurch RA7:6 frei werden.

Denke aber daran (Datenblatt S. 133), dass der PIC an seinen Ausgängen 
und insgesamt nicht beliebig viel Strom liefern kann. Absolute 
Grenzwerte sind lt. Datenblatt 250mA Stromaufnahme über den Vdd (+)-Pin, 
am einzelnen Ausgang dürfen maximal 25mA rein/raus! Aber: bei 15 LED: 
250mA/15=16.6 mA/Ausgang! Noch eine Bremse: Maximale Verlustleistung des 
PIC=800mW, bei 5V also nicht mehr als 160mA Stromaufnahme in den 
Vdd-Pin.

Nochmals: mit dem Programmer/Brenner würde ich nicht sparen und NUR das 
Pickit3 verwenden. Damit hast Du die nächsten Jahre Deine Ruhe und Du 
vermeidest jeden Ärger den Du wahrscheinlich mit einem anderen Gerät 
haben wirst.

>Eine Programmier Platine habe ich bereits und ein Brenner Programm auch.
>Damit muss ich ja einfach nur die .hex Datei auf den Controller Brennen
>oder?

Mit MPLAB schreibst Du Deinen Programmcode z.B. in Assembler. Dann gehst 
Du einfach ins Programmer-Menü, wählst z.B. Pickit3. Im Menu Projekt 
wählst Du "Make" oder drückst [F10] und schon wird Dein Code automatisch 
in Hexcode umgewandelt und in den PIC geschrieben. Bei einem anderen 
Programmer musst Du das zugehörige Programm gestartet haben, dann die 
Einstellungen zum verwendeten PIC vornehmen usw. und dann mag es sein 
(?), dass Dein Programm klaglos in den PIC geschrieben wird.

Vielleicht hat Dir diese und meine vorherige Antwort etwas geholfen :-)

mfG GroberKlotz

von W.S. (Gast)


Lesenswert?

Sebastian G. schrieb:
> Ich möchte dies mit dem Mikrocontroller PIC16F628A verwirklichen, da ich
> davon schon 2 gekauft habe.
>
> Eine Programmier Platine habe ich bereits und ein Brenner Programm auch.
> Damit muss ich ja einfach nur die .hex Datei auf den Controller Brennen
> oder?

Naja. Also ich hoffe mal, daß die 2 PIC's nicht zu teuer gewesen sind, 
falls deine Interessenlage denn doch anders ist als beschrieben.

Ich selber habe genau diesen Typ PIC schon seit langem im Einsatz, davon 
sind Abertausende in verschiedensten Geräten in der Welt. Aber ich habe 
im Gegensatz zu den anderen Vorrednern diese Chips immer in Assembler 
programmiert.

Zum Hex-File: das ist eine lesbare Textdatei, die zeilenweise den 
eigentlichen Maschinencode nebst Adressen, Blocklängen und Prüfsummen 
enthält. Sowas versteht eigentlich nur das Brennprogramm, was dann an 
die betreffenden Stellen im Flash des Controllers die gewünschten 
Bitmuster schreibt. Das Hexfile ist also NICHT der eigentliche 
Maschinencode.

Aber wenn du schon einen Brenner (nebst zugehörigem Programm) hast, dann 
sollte das alles klar gehen.

Das Problem an sowas wie PICKIT2 und 3 ist, daß es eben NUR das MPLAB 
bzw. dessen Javaversion von Microchip dafür gibt und keinerlei andere 
(schlankere) Programmierprogramme. Sowas nagelt einen doch sehr auf die 
Üblichkeiten bei Microchip fest und läßt wenig Raum für Alternativen.

Nun weiß ich (wie die anderen hier) natürlich nicht, was denn so an 
Interessen und Fertigkeiten in dir steckt. Also - abgesehen von deinem 
Lauflicht - wonach strebst du? Die PIC's kennenlernen? Bloß so 
programmieren? Was fertiges auch haben wollen? Fertigkeiten in 
PIC-Assembler erwerben? Oder nur Fertigkeiten in einer weniger 
hardwareorientierten Programmiersprache?

Diese Fragen mußt du dir selbst beantworten und danach deinen Weg 
einschlagen.

W.S.

von Sebastian A. (micropoint)


Lesenswert?

Vielen vielen Dank schonmal für die vielen Beiträge und Tipps von euch, 
das hat mir schon sehr weiter geholfen. Auf den seiten von "sprut" und 
"pic-projekte" kann man ja wirklich viel dazu lernen und die ersten 
schritte besser verstehen. Ich werde mir mal den MPLABX und den XC8 
Compiler herunterladen und mich langsam durchlesen. Das schwierigste 
finde ich das vieles auf Englisch ist und ich die Englischen fach 
Begriffe nicht alle kenne.

Ich glaube zum Anfang werde ich mit Assambler durchstarten das wird 
schwierig genug und irgendwann habe ich vielleicht auch zeit und lust 
auf C.

Das Interesse ein Lauflicht zu bauen hat ziemlich große Ausmaße 
angenommen, aber um so mehr ich über Mikrocontroller lerne um so mehr 
möchte ich das alles verstehen. Aber glaube ohne dieses Forum und eure 
guten Beiträge würde ich das nicht erlernen.

Das PIC Kit habe ich mir noch nicht gekauft da es ja schon nicht gerade 
günstig ist. Ich versuche mal mit dem was ich jetzt habe etwas auf die 
Beine zu stellen, falls ich nicht weiter komme kann ich euch ja 
hoffentlich fragen :-)

Vielen Dank schonmal ! Echt Super, so viel Hilfe innerhalb von 24h hätte 
ich nicht erwartet.

Gruß Sebastian

von Sebastian A. (micropoint)


Lesenswert?

Den XC8 Compiler benötige ich doch nur wenn ich in C Programmieren will 
oder verstehe ich das falsch? Kann ich in MPLABX v3.00 auch in Assamlber 
Sprache schreiben?

von Michael S. (rbs_phoenix)


Lesenswert?

Sebastian G. schrieb:
> Das schwierigste
> finde ich das vieles auf Englisch ist und ich die Englischen fach
> Begriffe nicht alle kenne.

Gut. Englisch ist in dem Bereich Standard. Die meisten Fachbegriffe sind 
allerdings schon auf Englisch ;)


Sebastian G. schrieb:
> Ich glaube zum Anfang werde ich mit Assambler durchstarten das wird
> schwierig genug und irgendwann habe ich vielleicht auch zeit und lust
> auf C.

Mach das. Ich persönlich finde C deutlich einfacher. ASM hat den 
Vorteil, dass man da einen näheren Bezug zur noch unbekannten Hardware 
hat. Aber Hochsprachen sind ja eben dazu da, nicht zu nah an der 
Hardware zu sein um soviel es geht Hardwareunabhängig zu programmieren. 
So kann man mal ne C Funktion von nem PIC auch mit wenig oder am besten 
keinem Aufwand für nen AVR oder ARM nehmen (und anders rum).


Sebastian G. schrieb:
> Das PIC Kit habe ich mir noch nicht gekauft da es ja schon nicht gerade
> günstig ist.

Joa. Es ist das Geld mMn aber wert und es gibt auch Chinaclones bei ebay 
für 15-20€.


Sebastian G. schrieb:
> Ich versuche mal mit dem was ich jetzt habe etwas auf die
> Beine zu stellen, falls ich nicht weiter komme kann ich euch ja
> hoffentlich fragen :-)

Jeder kann mit jeder Frage hier ankommen und ihm wird geholfen. WENN man 
gewisse "Regeln" befolgt ;)
- Dazu gehört zu schreiben, was man probiert hat und nicht funktioniert
- Am besten im Vorfeld Schaltplan, Code und ggf Foto des Aufbaus oder 
Layout anhängen (auch den Code)
- zumindest ein bisschen auf Grammatik achten. Ein Text ohne Absätze, 
Satzzeichen und Großbuchstaben kommt meistens SEHR schlecht an ;)

Dann ist es egal, ob du ein Lauflicht, MP3 Player, Oszi oder Linuxboard 
machen willst. Es wird dir geholfen und die dummen Sprüche sind auf das 
Minimum gebracht. Wenn man sich aber alles nur aus der Nase ziehen 
lässt, so tut, als wäre es ein Top Secret Projekt, auf die Hälfte nicht 
eingeht und meint man weiß alles besser, kann und wird einem nicht 
geholfen. Manche werden dann auch ziemlich ausfallend und andere 
ziemlich.beleidigend. Das ist der Nachteil an diesem Forum.


Sebastian G. schrieb:
> ! Echt Super, so viel Hilfe innerhalb von 24h hätte
> ich nicht erwartet.

Das ist das gute an diesem Forum ;) Wenn man die Frage richtig stellt, 
bekommt man auch qualifizierte und schnelle Antworten.


Sebastian G. schrieb:
> Den XC8 Compiler benötige ich doch nur wenn ich in C Programmieren will
> oder verstehe ich das falsch? Kann ich in MPLABX v3.00 auch in Assamlber
> Sprache schreiben?

Richtig. Der Assembler ist bei der IDE dabei, die Compiler nicht. Ist 
jetzt aber auch nicht irre groß. Musst du wissen, ob du den gleich mit 
lädst unf installierst. Wenn du so bist wie ich, willst du den relativ 
schnell testen und bleibst dann erstmal bei C ;)

von Kermit (Gast)


Angehängte Dateien:

Lesenswert?

Für PIC16 kommt m.E. eigentlich nur Assembler in Frage! Ich haben gerade 
den 16F628a auch in vielen kleineren Geräten/Projekten im Einsatz und 
habe mir damals die optisch ziemlich ähnliche Testplatine wie 
GroberKlotz geätzt (nicht auf Lochraster!). Sprut hat mir netterweise 
die CorelDraw Datei gesendet für kleinere Anpassungen! Es ist heute mein 
Standard-Controller schlechthin. Ich habe noch mit dem "Vorgänger" 
PIC16F84 angefangen und bin diesem Typ eben mit dem 16F628a bis heute 
treu geblieben, wenn es klein ist und schnell gehen soll. Zur Einführung 
in einfache uC-Programmierung würde ich den auch heute noch nach wie vor 
empfehlen. Die relativ einfache Anpassbarkeit von den vielen 
PIC16F84-Programmen, die sprut zudem auch gut beschreibt, spricht dafür.

Für größere Projekte bin ich dann später aber von PIC weggegangen. Da 
war mir AVR lieber mit dem Atmega644 wegen den vielen I/O Pins, "großen" 
Flash, freien avr-gcc C-Compiler und günstigen Preis. Am Anfang war ich 
erstaunt, wie umständlich manche Dinge in C doch sind (wie z.B. ein Bit 
setzen oder löschen). Aber spätestens, wenn man mit printf Text 
formatieren möchte, um ihn auf einem Display auszugeben, bin ich froh, 
dass ich das nicht in Assembler machen muss. Ebenso bei komplexeren 
Berechnungen, bei denen ich mathematisch an meine Grenzen stoße.

von Thomas E. (picalic)


Lesenswert?

Kermit schrieb:
> Ich habe noch mit dem "Vorgänger"
> PIC16F84 angefangen und bin diesem Typ eben mit dem 16F628a bis heute
> treu geblieben

Deine Treue in allen Ehren, aber man darf und sollte sich für ein neues 
Projekt auch ruhig mal die etwas moderneren PIC-Typen anschauen. Die 
"Enhanced MID Range" Typen kann man auf jeden Fall ohne Änderung der 
Hardware statt der alten MID-Range Typen nehmen.
Programmiertechnisch muss man nicht viel umlernen, hat aber deutliche 
Vorteile, wie z.B. automatisches (und schnelles!) Sichern der Register 
bei Interrupts, erweiterter Befehlssatz, höhere Taktfrequenzen (oft bis 
32MHz mit internem Oszillator!) und diverse Kleinigkeiten mehr...

: Bearbeitet durch User
von Little B. (lil-b)


Lesenswert?

Im Allgemeinen kann ich mich der vorherrschenden Meinung anschließen:

MplabX mit XC8 compiler, kostenlos und unbegrenzt bei Microchip.

Dazu empfehle ich ebenfalls den Pickit3, das gibts auch im Bundle mit 
einem Pic18-Demoboard für nicht ganz 80€ original von Micorchip.

Klar, das mag auf den ersten Blick viel erscheinen, aber bedenke: Mit 
dem Pickit kannst du ALLE Mikrocontroller von Microchip programmieren, 
auch die ganz großen Pic32MZ. Dazu ein leicht modifizierbares Demoboard 
(auf meinem ist mittlerweile ein HD44780 aufgelötet).

Mit einem solchen Debugger kannst du nicht nur das Programm auf den 
Controller schreiben, sondern auch direkt in der Hardware debuggen. So 
lassen sich Fehler im Code deutlich schneller eingrenzen und auffinden.

von Sebastian A. (micropoint)


Lesenswert?

Hallo, hat jemand von euch ein Lauflicht Programm für den PIC16F628A, 
das ich etwas spicken kann? Gerne in C und Assamlber...

Gruß

Sebastian

von chris (Gast)


Lesenswert?

ASM oder basic?

von Max H. (hartl192)


Angehängte Dateien:

Lesenswert?

Sebastian G. schrieb:
> hat jemand von euch ein Lauflicht Programm für den PIC16F628A
Siehe Anhang

von Sebastian A. (micropoint)


Lesenswert?

Am besten in Assamlber und in C so das ich mit beiden etwas Spielen kann 
dann fällt hoffentlich meine Entscheidung mit welcher Sprache ich 
beginne am Anfang.

Gruß

Sebastian

von Michael S. (rbs_phoenix)


Lesenswert?


von Teutschlehrer (Gast)


Lesenswert?

Sebastian G. schrieb:

> Assambler

Das Dingens heisst Assembler.

Das schreibst Du jetzt 100 mal...

von Sebastian A. (micropoint)


Lesenswert?

Teutschlehrer schrieb:
> Sebastian G. schrieb:
>
>> Assambler
>
> Das Dingens heisst Assembler.
>
> Das schreibst Du jetzt 100 mal...

Entschuldige, ist mir nicht aufgefallen.

Assembler :)

von Sebastian A. (micropoint)


Lesenswert?

Bei dem Lauflicht beispiel Programm von sprut.de zeigt er mir in MPLAB 
ganz viele Fehler und Error an wenn ich auf Build gehe. Ich bräuchte nur 
mal ein Fertiges Programm für den PIC 16F628A das ich mal ein bisschen 
Klarheit in das ganze bekomme...

Würde mich freuen wenn jemand da was für mich hätte.

von Sebastian A. (micropoint)


Lesenswert?

Max H. schrieb:
> Sebastian G. schrieb:
>> hat jemand von euch ein Lauflicht Programm für den PIC16F628A
> Siehe Anhang

Habe den Code
1
// Untested
2
3
#define _XTAL_FREQ 4000000
4
5
#include <xc.h>
6
#include <stdint.h>
7
8
// Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT
9
// pin, I/O function on RA7/OSC1/CLKIN)
10
#pragma config FOSC = INTOSCIO 
11
// Watchdog Timer Enable bit (WDT disabled)
12
#pragma config WDTE = OFF   
13
// Power-up Timer Enable bit (PWRT disabled)
14
#pragma config PWRTE = OFF     
15
// RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)
16
#pragma config MCLRE = ON      
17
// Brown-out Detect Enable bit (BOD enabled)
18
#pragma config BOREN = ON     
19
// Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function,
20
// HV on MCLR must be used for programming)
21
#pragma config LVP = OFF       
22
// Data EE Memory Code Protection bit (Data memory code protection off)
23
#pragma config CPD = OFF        
24
// Flash Program Memory Code Protection bit (Code protection off)
25
#pragma config CP = OFF      
26
27
28
void main(void)
29
{
30
  uint8_t lauflicht = 1;
31
  TRISB = 0x00;
32
  PORTB = 0x00;
33
34
  while(1)
35
  {
36
    lauflicht <<= 1;
37
    if(lauflicht == 0)
38
      lauflicht = 1;
39
    PORTB = lauflicht;
40
    __delay_ms(100);
41
  }
42
}
 auf den Controller gebrannt, aber er gibt keine Spannung an dem Port 
aus, woran kann das liegen?

von Max H. (hartl192)


Lesenswert?

Sebastian G. schrieb:
> aber er gibt keine Spannung an dem Port
> aus, woran kann das liegen?
Wie gemessen? An welchen Pins?

: Bearbeitet durch User
von Автомат К. (dermeckrige)


Lesenswert?

Sebastian G. schrieb:
> Am besten in Assamlber

Die Mutter aller Lauflichtprogramme für PIC16 in ASM:

; David Tait (david.tait@man.ac.uk)
;
  PROCESSOR       16C54  ;COULD BE ANY 16C5X
  __CONFIG        0FH    ;RC OSC, WATCHDOG
;
PORTB   EQU     6
STATUS  EQU     3
CARRY   EQU     0
NOT_TO  EQU     4
RFLG    EQU     8               ;GO RIGHT FLAG
MSB     EQU     3               ;BIT POSITION OF LEFTMOST LED
;
  BTFSS   STATUS,NOT_TO   ;RESET OR WATCHDOG TIMEOUT?
  GOTO    NOINIT          ;SKIP INIT IF TIMEOUT
  MOVLW   1               ;INIT IF RESET
  MOVWF   PORTB
  CLRF    RFLG
NOINIT  CLRW
  TRIS    PORTB           ;PORTB ALL OUTPUTS
  MOVLW   0AH
  OPTION                  ;WATCHDOG PRESCALE 4:1
  BCF     STATUS,CARRY
  BTFSC   RFLG,0          ;CHECK LEFT OR RIGHT
  GOTO    RIGHT
LEFT    RLF     PORTB,F         ;LIGHT LED TO LEFT
  BTFSC   PORTB,MSB       ;LEFTMOST?
  COMF    RFLG,F          ;YES - GO RIGHT NEXT TIME
  SLEEP
RIGHT   RRF     PORTB,F         ;LIGHT LED TO RIGHT
  BTFSC   PORTB,0         ;RIGHTMOST?
  COMF    RFLG,F          ;YES - GO LEFT NEXT TIME
  SLEEP
;
  END

PS: Im Gegensatz zu den Sprut-Beispielen läuft das Programm unabhängig 
von der µC-Taktfrequenz ;-)

: Bearbeitet durch User
von Sebastian A. (micropoint)


Lesenswert?

Max H. schrieb:
> Sebastian G. schrieb:
>> aber er gibt keine Spannung an dem Port
>> aus, woran kann das liegen?
> Wie gemessen? An welchen Pins?

An den Pins RB0 - RB7 LED´s leuchten nicht. Gibt er auch eine Spannung 
an den ports aus wenn keine LED´s angeklemmt sind? So das ich z.b. mit 
einem Multimeter Messen kann ob eine Spannung da ist?

: Bearbeitet durch User
von Sebastian A. (micropoint)


Lesenswert?

Автомат Калашникова schrieb:
> Sebastian G. schrieb:
>> Am besten in Assamlber
>
> Die Mutter aller Lauflichtprogramme für PIC16 in ASM:
>
> ; David Tait (david.tait@man.ac.uk)
> ;
>   PROCESSOR       16C54  ;COULD BE ANY 16C5X
>   __CONFIG        0FH    ;RC OSC, WATCHDOG
> ;
> PORTB   EQU     6
> STATUS  EQU     3
> CARRY   EQU     0
> NOT_TO  EQU     4
> RFLG    EQU     8               ;GO RIGHT FLAG
> MSB     EQU     3               ;BIT POSITION OF LEFTMOST LED
> ;
>   BTFSS   STATUS,NOT_TO   ;RESET OR WATCHDOG TIMEOUT?
>   GOTO    NOINIT          ;SKIP INIT IF TIMEOUT
>   MOVLW   1               ;INIT IF RESET
>   MOVWF   PORTB
>   CLRF    RFLG
> NOINIT  CLRW
>   TRIS    PORTB           ;PORTB ALL OUTPUTS
>   MOVLW   0AH
>   OPTION                  ;WATCHDOG PRESCALE 4:1
>   BCF     STATUS,CARRY
>   BTFSC   RFLG,0          ;CHECK LEFT OR RIGHT
>   GOTO    RIGHT
> LEFT    RLF     PORTB,F         ;LIGHT LED TO LEFT
>   BTFSC   PORTB,MSB       ;LEFTMOST?
>   COMF    RFLG,F          ;YES - GO RIGHT NEXT TIME
>   SLEEP
> RIGHT   RRF     PORTB,F         ;LIGHT LED TO RIGHT
>   BTFSC   PORTB,0         ;RIGHTMOST?
>   COMF    RFLG,F          ;YES - GO LEFT NEXT TIME
>   SLEEP
> ;
>   END
>
> PS: Im Gegensatz zu den Sprut-Beispielen läuft das Programm unabhängig
> von der µC-Taktfrequenz ;-)

make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/Users/Sebastian/Downloads/ggg.X'
make  -f nbproject/Makefile-default.mk 
dist/default/production/ggg.X.production.hex
make[2]: Entering directory 'C:/Users/Sebastian/Downloads/ggg.X'
make[2]: *** [build/default/production/newAsmTemplate.o] Error 1
"C:\Program Files (x86)\Microchip\MPLABX\v3.00\mpasmx\mpasmx.exe" -q 
-p16f628a -l"build/default/production/newAsmTemplate.lst" 
-e"build/default/production/newAsmTemplate.err" 
-o"build/default/production/newAsmTemplate.o" "newAsmTemplate.asm"
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 11 : 
Executable code and data must be defined in an appropriate section
Error[151]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 12 : 
Operand contains unresolvable labels or is too complex
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 12 : 
Executable code and data must be defined in an appropriate section
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 13 : 
Executable code and data must be defined in an appropriate section
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 14 : 
Executable code and data must be defined in an appropriate section
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 15 : 
Executable code and data must be defined in an appropriate section
Error[150]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 16 : 
Labels must be defined in a code or data section when making an object 
file
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 16 : 
Executable code and data must be defined in an appropriate section
Warning[224] C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 17 : 
Use of this instruction is not recommended.
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 17 : 
Executable code and data must be defined in an appropriate section
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 18 : 
Executable code and data must be defined in an appropriate section
Warning[224] C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 19 : 
Use of this instruction is not recommended.
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 19 : 
Executable code and data must be defined in an appropriate section
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 20 : 
Executable code and data must be defined in an appropriate section
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 21 : 
Executable code and data must be defined in an appropriate section
Error[151]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 22 : 
Operand contains unresolvable labels or is too complex
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 22 : 
Executable code and data must be defined in an appropriate section
Error[150]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 23 : 
Labels must be defined in a code or data section when making an object 
file
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 23 : 
Executable code and data must be defined in an appropriate section
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 24 : 
Executable code and data must be defined in an appropriate section
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 25 : 
Executable code and data must be defined in an appropriate section
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 26 : 
Executable code and data must be defined in an appropriate section
Error[150]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 27 : 
Labels must be defined in a code or data section when making an object 
file
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 27 : 
Executable code and data must be defined in an appropriate section
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 28 : 
Executable code and data must be defined in an appropriate section
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 29 : 
Executable code and data must be defined in an appropriate section
Error[152]   C:\USERS\SEBASTIAN\DOWNLOADS\GGG.X\NEWASMTEMPLATE.ASM 30 : 
Executable code and data must be defined in an appropriate section
nbproject/Makefile-default.mk:95: recipe for target 
'build/default/production/newAsmTemplate.o' failed
make[2]: Leaving directory 'C:/Users/Sebastian/Downloads/ggg.X'
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
nbproject/Makefile-default.mk:78: recipe for target '.build-conf' failed
make[1]: Leaving directory 'C:/Users/Sebastian/Downloads/ggg.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed

BUILD FAILED (exit value 2, total time: 993ms)


Ich geb´s langsam auf :o

Das es so kompliziert sein kann ein Paar LED´s leuchten zu lassen hätte 
ich nicht gedacht.

von chris (Gast)


Lesenswert?

Nimm dies hier.
http://www.oz1bxm.dk/PIC/628LED.htm
Muss nur auf A type geändert werden.
CPU sowie include

von Klaus (Gast)


Lesenswert?

Sebastian G. schrieb:
> Das es so kompliziert sein kann ein Paar LED´s leuchten zu lassen hätte
> ich nicht gedacht.

Also 8 LEDs anzulöten dauert länger, als in MPLABX eine neues Projekt 
aufzumachen, sich ein main-File erzeugen zu lassen, die 10 Zeilen C für 
ein Lauflicht zu schreiben und das ganze mit dem PICkit zu flashen. Das 
Datenblatt des Prozessors mal zu lesen hab ich rausgelassen, da kommt 
man sowieso nicht drumherum.

MfG Klaus

von John (Gast)


Lesenswert?


von micropoint (Gast)


Lesenswert?

Reicht 1 Microcontroller, die LED´s und passende Wiederstände nicht?

Bei http://www.manelsoft.com/projects/pic16f628a_led_chaser.aspx sind ja 
noch Kondensatoren usw. in der Schaltung ?

von Max H. (hartl192)


Lesenswert?

micropoint schrieb:
> Bei http://www.manelsoft.com/projects/pic16f628a_led_chaser.aspx sind ja
> noch Kondensatoren usw. in der Schaltung ?
Der 100nF zwischen Vdd und Vss, nahe an den Pins, ist auch notwendig. 
Siehe: 
https://www.mikrocontroller.net/articles/Kondensator#Entkoppelkondensator

: Bearbeitet durch User
von Thomas E. (picalic)


Lesenswert?

Sebastian G. schrieb:
> ...
> BUILD FAILED (exit value 2, total time: 993ms)
>
> Ich geb´s langsam auf :o
>
> Das es so kompliziert sein kann ein Paar LED´s leuchten zu lassen hätte
> ich nicht gedacht.

Bevor Du versuchst, ein "sinnvolles" Programm zu verarbeiten, solltest 
Du Dich vielleicht zunächst mal mit ein paar Grundlagen beschäftigen und 
die Entwicklungsumgebung wenigstens soweit beherrschen, daß Du es 
schaffst, ein Programm, das gar nichts macht (das z.B. nur aus ein paar 
"No Operation"-Befehlen besteht) vom Source Code in den Hex-Code 
umzuwandeln.

: Bearbeitet durch User
von micropoint (Gast)


Lesenswert?

Ist es möglich einfach einen 100nF zwischen Vdd und Vss, die beiden an 
Plus und Minus und an den anderen Pins gibt der PIC mir nach und nach 
(Lauflicht) Spannung die ich über Wiederstände an LED´s gebe und bei der 
letzten LED das ganze wieder von vorne?

Eigentlich ja nichts Kompliziertes oder doch?

Hier ein beispiel Video wie ich es vor habe.
https://www.youtube.com/watch?v=whKYU7W8whw

von chris (Gast)


Lesenswert?

Benutz doch das asm prog von 628.
Defines:
#define Led0 PORTB,0
....
#define Led14 PORTA,7

Dann delay1 und delay2 mit unterschiedlichen
Zeiten.
delay1 MOVLW 60
    CALL delay+1
delay2  ; hier 1 sec.
   CALL $+1
   CALL $+1
   GOTO delay

Dann in Main

Main
 MOVLW 0xff
 MOVWF PORTA
 MOVWF PORTB
 CALL delay2
 CLRF PORTA
 CLRF PORTB
 CALL delay
 BSF Led0
 CALL delay1
 BSF Led1
 CALL delay1
 BSF Led2
 CALL delay1
 ...
 BSF Led13
 CALL delay1
 GOTO Main

von GroberKlotz (Gast)


Angehängte Dateien:

Lesenswert?

@ Sebastian G

Anbei ein Lauflicht aus alter Zeit, habe es nur mal kurz überflogen, 
zussätzlich kommentiert und mit MPLAB 8.92 assembliert und mit meiner 
18-Pin Testplatine (sprut) erfolgreich getestet.

mfG GroberKlotz

von chris (Gast)


Lesenswert?

Schöne code obfuscation.
Das erste mal dass ich sowas sehe.
Delay100ms ist nicht 100ms sondern 2.44ms
Aber im W wird 0 über geben,  also 256x2.44ms
Ist ca 624ms oder der Wert 5, was dann 10ms wäre, je nach Version des 
kompilers.
 Dies alles ist nicht gleich ersichtlich. Es wäre aber besser die Zeit 
von 2.44ms einfach auf 10ms zu erhöhen.
Für 100ms sind die Werte 199 sowie 167 dezimal für d1 und d2. Dann sind 
es echte  ca 100ms Intervalle.
Fosc_mult sollte ein  +0.5 am Ende stehen haben wegen runfungsfeler, da 
darf dann aber keine Klammer beim Aufruf verwendet werden.
Weiters sollte beim laden von w ein +1. Angehängt werden, man kann ed 
auch delay_offset nennen, ansonsten müsste man
Nach movwf d3 ein incf d3 reińmachen.

von W.S. (Gast)


Lesenswert?

chris schrieb:
> Schöne code obfuscation.

Nanana..
Das Beispiel vom groben Klotz ist hier das erste !! was wenigstens 
einigermaßen eine anständige Form hat und größtenteils problemlos lesbar 
ist. Nix Obfuscation.

Es zeigt zwar all die notationstechnischen Dinge, die mir bei MicroChip 
schon immer auf den Nerv gegangen sind, aber da kann man nix machen, die 
Assemblernotation bei denen ist eben so.

Allerdings sind mir ein paar Dinge aufgefallen:

 __CONFIG _FOSC_INTOSCIO
Mir ist nicht erinnerlich, daß der 16F628A einen internen RC-Oszillator 
hat. Hat er nun? Oder sollte da doch ein Quarz oder wenigstens ein 
billiger Keramikschwinger dran?

;--RAM ALLOCATION          ;Zuweisung von Registeradressen an Labels)
   CBLOCK   0x20           ;Variablen ab Adresse 20h anlegen
      d1,d2,d3             ;Zähler in Sub Delay100ms
   ENDC
kriegt man das nicht lesbarer, etwa so:
    SEG RAM
    ORG 20h
d1: DS  1
d2: DS  1
d3: DS  1

Jaja,ich weiß, bei älteren Assemblern konnte man nur
d1: equ 21h
d2: equ 22h
d3: equ 23h
schreiben. Ging auch, war aber recht unschön.

W.S.

von Sebastian A. (micropoint)


Angehängte Dateien:

Lesenswert?

Hallo, habe das Programm auf den PIC gebrannt, müsste eine LED an RB7 
nicht normal leuchten wenn ich sie anklemme? Denn das tut sie auf keinem 
der Ports...

Habe ich den PIC richtig angeklemmt?

von Stefan (Gast)


Lesenswert?

MCLR muß auf Plus, sonst läuft nix.

von Sebastian A. (micropoint)


Lesenswert?

Funktioniert!!! Endlich Leuchten sie :)

von GroberKlotz (Gast)


Lesenswert?

W.S. schrieb:
> __CONFIG _FOSC_INTOSCIO
> Mir ist nicht erinnerlich, daß der 16F628A einen internen RC-Oszillator
> hat.

Hat er wohl!
1. Siehe header file P16F628A.INC, Abschnitt "CONFIG Options"
2. Siehe Datenblatt zum PIC16F628A Abschnitt 4.2.2.6 (S.29)
>PCON Register
>bit 3 OSCF: INTOSC Oscillator Frequency bit
>            1 = 4 MHz typical
>            0 = 48 kHz typical

mfG GroberKlotz

von Sebastian A. (micropoint)


Lesenswert?

Hallo, kann ich RA0 - RA7 auch noch zum LED ansteuern verwenden? (bis 
auf RA5/MCLR)

Wenn ja, wie muss ich das in Assembler schreiben?
1
TITLE "LED-Lauflicht"
2
   NOLIST
3
;********************************************************************
4
; Datei:    LED_Lauflicht_03.ASM
5
; Autor:    GroberKlotz
6
; begonnen: 18.07.2010
7
; geändert: 14.06.2015
8
; IDE:      MPLAB 8.92
9
;********************************************************************
10
; PROJEKT
11
; Einfaches Lauflicht, Ansteurung von 8 LEDs an PORTB,RB7:0
12
; Ports sind H-aktiv, LEDs sind an jedem Pin von PORTB nach GND mit
13
; Vorwiderstand 560 Ohm angeschlossen.
14
; Einschaltreihenfolge der LEDs: RB7 ... RB0 -> RB7 ... RB0 usw....
15
; 
16
; FUNKTIONSBESCHREIBUNG
17
; Zunächst wird PORTB,RB7 = 1 und (RB6:0) = 0 gesetzt.
18
; Mittels des Bitshift-Befehls "RRF PORTB,F" wird das H-Bit 8x um
19
; 1 Position verschoben und steuert dabei die an den Pin geschaltete
20
; LED ein.
21
; Beim Bitshift wird das "herausfallende" Bit automatisch in das
22
; Bit "STATUS,C" geschoben. Da nur 1 Bit den Wert 1 hat, wird nach
23
; 8maligem RRF keine 0 sondern eine 1 aus RB0 herausgeschoben.
24
; Die Bits RB7:0 haben dann allesamt den Wert 0. Der Wert von "C"
25
; wird abgefragt und falls C=1 ist, startet das Lauflicht erneut mit
26
; PORTB,RB7=1.
27
;********************************************************************
28
; Hardware: PIC16F628A
29
;           18Pin-Testplatine
30
;           Interner Oszillator 4MHz
31
;           RB7:0 je 1x Rv=560 OHM + LED 
32
; 
33
; Files     P16F628A.INC
34
;           Datenplatt zum PIC16F628A
35
;********************************************************************
36
   LIST
37
;--SUPPRESSED WARNINGS
38
   ERRORLEVEL-302             ;Meldung wegen Bankwechsel  
39
;--MCU CONFIGURATION
40
   LIST      P=16F628A        ;list directive to define processor
41
   #INCLUDE <P16F628A.INC>    ;processor specific variable definitions
42
   __CONFIG _FOSC_INTOSCIO & _LVP_OFF & _CPD_OFF & _CP_OFF & _WDT_OFF & _PWRTE_ON
43
;  __CONFIG _LP_OSC & _LVP_OFF & _CPD_OFF & _CP_OFF & _WDT_OFF & _PWRTE_ON
44
;
45
; Configwords und alle andere Labels (z.B. PORTB, RA7, RA0 sind
46
; explizit in der Datei P16F628A.INC (Pfad: "MPLAB/MPASM Suite"
47
; zugewiesen.
48
;********************************************************************
49
;--RAM ALLOCATION          ;Zuweisung von Registeradressen an Labels)
50
   CBLOCK   0x20           ;Variablen ab Adresse 20h anlegen
51
      d1,d2,d3             ;Zähler in Sub Delay100ms
52
   ENDC
53
   ;
54
;--LABELS & CONSTANTS
55
   ;Konstante zur Anpassung an unterschiedliche Oszillatorfrequenz
56
   ;Dazu den Eintrag der Frequenz (MHz) anpassen
57
   FOSC       EQU 4        ;Oszillatorfrequenz Fosc (MHz)
58
   FOSC_MULT  EQU FOSC/4   ;Multiplikator für Delays berechnen
59
;********************************************************************
60
   ORG      0x000          ;Einsprung nach Reset (Startup)
61
   GOTO     Init                 
62
;********************************************************************
63
;   ORG     0x004   ;Einsprung bei Interrupt (nicht verwendet)
64
;   RETFIE
65
;********************************************************************
66
Init:
67
;--PORTA                   ;nicht verwendet
68
   BANKSEL  PORTA          ;bank0
69
   clrf     PORTA          ;clear output-latches
70
   movlw    0x07
71
   movwf    CMCON          ;configure analog pins as digital I/O
72
   BANKSEL  TRISA          ;bank1
73
   clrf     TRISA          ;RA7:0 are outputs (except RA5)
74
   ;
75
;--PORTB
76
   BANKSEL  PORTB          ;bank0
77
   clrf     PORTB          ;clear output-latches
78
   BANKSEL  TRISB          ;bank1
79
   clrf     TRISB          ;Wert zum umstellen der Pins auf Ausgang
80
   ;
81
;--WEAK PULL UPs PORTB
82
   bsf     OPTION_REG,7    ;b7=1 PORTB Weak Pull up OFF (bank1)
83
   ;
84
;--PCON - INTERNAL OSCILLATOR
85
   ; nur verwenden wenn im CONFIG Int Osc aktiviert ist! 
86
                           ;bank1, S.29 Datenblatt
87
   bsf      PCON,OSCF      ;b3=1 set IntOsc to 4MHz
88
   BANKSEL  0              ;zurück zu bank0
89
;********************************************************************
90
;  HAUPTPROGRAMM
91
;********************************************************************
92
Main
93
   movlw    b'10000000'    ;Lauflicht beginnt mit LED an RB7
94
   movwf    PORTB          ;RB7=1, RB6:0=0
95
   ;
96
MainShift
97
   movlw   .5*FOSC_MULT    ;Wert für Verzögerungsschleife 0,5s
98
   CALL     Delay100ms     ;LED-Wechsel im Sekundentakt (5x100ms)
99
   ;
100
   bcf      STATUS,C       ;Carry löschen, wird nach RRF in PORTB,RB7 übertragen
101
   rrf      PORTB,f        ;RRF schiebt die Bitreihe in PORTB,RB7:0 um 1 Bit
102
                           ;in Richtung RB0. Das "herausfallende" Bit0 wird
103
                           ;in das Carrybit (STATUS,C) übertragen. Daher muss
104
                           ;das Carrybit für das Lauflicht gelöscht bleiben..
105
                           ; 
106
   btfss    STATUS,C       ;C=1? aktueller Zyklus RB7:0  abgelaufen? (PORTB=00000000)
107
   GOTO     MainShift      ;NEIN, LED EIN anzeigen und weiter mit RRF.
108
   GOTO     Main           ;Restart with bit 7
109
;********************************************************************
110
;  UNTERPROGRAMME
111
;********************************************************************
112
Delay100ms
113
; Basic-Delay = 0.100 seconds fosc 4MHz
114
; Übergabe der Anzahl 1/100el Sekunden im WREG
115
; Wertbereich: 1-255 (nach Multiplikation mit FOSC_MULT!)
116
   movwf    d3             
117
Delay100ms_0
118
   movlw    0x1E
119
   movwf    d1
120
   movlw    0x4F
121
   movwf    d2
122
Delay100ms_1
123
   decfsz   d1, f
124
   goto     $+2
125
   decfsz   d2, f
126
   goto     Delay100ms_1   
127
   goto     $+1
128
   nop
129
   decfsz   d3,f
130
   GOTO     Delay100ms_0
131
   RETURN      ;Generated by http://www.piclist.com/cgi-bin/delay.exe
132
;********************************************************************
133
   END

von GroberKlotz (Gast)


Lesenswert?

Sebastian G. schrieb:
> Hallo, kann ich RA0 - RA7 auch noch zum LED ansteuern verwenden? (bis
> auf RA5/MCLR)

JA! in der Konfiguration mit Internem Oszillator schon.
Beachte aber, dass RA4 ein Pin mit "open collector" ist, das heißt, dass 
Du diesen so beschalten musst:
z.B.:

RA4>---470R--LED-+5V   LED ist ON wenn RA4=LOW


RA4>--470R---+5V      LED ist ON wenn RA4=H
     |
    LED
     |
    GND

mfG GroberKlotz

P.S. Hattest Du meinen Code zum Laufen gebracht?

von Sebastian (Gast)


Lesenswert?

Achso Okay, ja habe es mit deinem Programm zum laufen gebracht, danke 
nochmal dafür, das hat mir sehr weiter geholfen.

Jetzt muss ich nur noch alles so umbauen das es so funktioniert:
https://www.youtube.com/watch?v=whKYU7W8whw

von Be T. (wilhelmt)


Lesenswert?

Hallo Sebastian!
Mir gings vor einiger Zeit ganz ähnlich wie dir, daher meine Empfehlung:
Kauf dir von Microchip das "PICkit 3 Starter Kit". Das enthält den 
PICkit 3 Programmer, mit dem (fast) alle µCs von Microchip zu 
programmieren sind, das enthält weiter ein Demoboard, und zwei Pic_µCs: 
den Pic 16F1829 und den Pic 18F14k22. Dazu gibts als Download den 
passenden "User Guide".
Darin enthalten sind sehr viele wichtigen Grundlagen, die man zum Anfang 
braucht, und vor allem dieses: 13 sehr gut dokumentierte und erklärte 
Programm-Beispiele. Und die sind alle sowohl in Assembler als auch in C 
vorhanden. Einen besseren Einstieg wirst du nicht finden.
Die Bedenken hinsichtlich der Englisch-Kenntnisse hatte ich auch. Aber 
so schlimm wird es nicht, mit Grundschatz kommt man recht gut zurecht. 
Zum Geld: Klar kostet das Geld. Aber was ist deine Zeit wert, wenn du 
Wochen verplemperst, weil du dich als Anfänger in zahllosen Fallgruben 
wieder findest, immer wieder Räder neu erfinden mußt, und dich in der 
Vielfalt der Angebotet im Inet verstrickst?!
Mit diesem Kit wirst du am schnellsten die Anfangshürden überwinden, das 
Ding ist jeden Cent wert. Und eine Prog-Anpassung an deine vorhandenen 
Pics wird dir dann auch leicht fallen.
Gruß, wilhelmT

von Toxic (Gast)


Lesenswert?

Sebastian G. schrieb:
> Hallo, kann ich RA0 - RA7 auch noch zum LED ansteuern verwenden? (bis
> auf RA5/MCLR)

Man kann vieles mit dem PIC16F628 machen - hier ein Beispiel mit Leds:
"Rotierende" Leds deren Helligkeit mit PWM gesteuert wird.
Fuer einen Newbie ein schoenes Anfangsprojekt(naja glaube ich zumindest) 
und die Gelegenheit sich etwas mit PWM zu beschaeftigen.Das braucht man 
fast alle naselang.....

https://youtu.be/yB4uQwuDITc

von Sebastian A. (micropoint)


Angehängte Dateien:

Lesenswert?

Leider fehlt mir momentan die Zeit um mich ausführlich um die 
Programierung meines PIC´s zu beschäftigen bzw. diese überhaupt erst 
einmal zu erlernen. Ich habe mir viele beispiele angesehen und auch 
teilweise viel verstanden von Programmcode und die Hilfe hier im Forum 
war auch eine sehr große. Danke dafür!

Leider leuchten die LED´s immer noch nicht so wie ich es gerne hätte. 
Momentan einfach nur ein Lauflicht, was aber schon ein großer Anfang für 
mich war. Eigentlich ist es nicht meine art andere zu bitten die Arbeit 
für einen zu erledigen, aber ich frage jetzt einfach mal vielleicht hat 
ja jemand schon was passendes für mich oder könnte es mir abgeändert 
zukommen lassen für den PIC16F628A.

Ich suche ein Programm das mir an allen möglichen Ausgängen (RB0 - RB7 
und die restlichen A Ports) LED´s ansteuert. Die LED´s sollen ähnlich 
wie bei einem Lauflicht nacheinander aufleuchten aber an bleiben, erst 
wenn alle Leuchten sollen sie wieder aus gehen. Die Geschwindigkeit des 
Lauflichts kann man ja dann variieren.

Wäre dies möglich? Könnte mir da jemand ein gefallen tun? Wäre sehr sehr 
sehr dankbar!

Gruß Sebastian

: Bearbeitet durch User
von Max (Gast)


Lesenswert?

Sebastian G. schrieb:
> Wäre dies möglich?
Natürlich:
1
#include <XC.h>
2
#include <stdint.h>
3
/*
4
Insert suitable configuration
5
*/
6
7
void main(void)
8
{
9
  uint16_t leds = 0;
10
  // Init IOs
11
  TRISA = 0;
12
  TRISB = 0;
13
  PORTA = 0;
14
  PORTB = 0;
15
16
  while(1)
17
  {
18
    // Calculate LED pattern
19
    leds = (leds << 1) | 1;
20
    if(leds == 0xFFFF)
21
      leds = 0;
22
 
23
    // Ouput the LED pattern
24
    PORTA = ((leds >> 8) & 0x1F) | ((leds >> 7) & 0xC0);
25
    PORTB = leds & 0xFF;
26
27
    __delay_ms(100);
28
  }
29
}

von Sebastian A. (micropoint)


Lesenswert?

Vielen DANK!!! Funktioniert schon fast Perfekt ! :)

Woran liegt es wenn ich die Delay Zeit verändere das er dann manche 
LED,s überspringt im Lauflicht?

// Untested

#define _XTAL_FREQ 4000000

#include <xc.h>
#include <stdint.h>

// Oscillator Selection bits (INTOSC oscillator: I/O function on 
RA6/OSC2/CLKOUT
// pin, I/O function on RA7/OSC1/CLKIN)
#pragma config FOSC = INTOSCIO
// Watchdog Timer Enable bit (WDT disabled)
#pragma config WDTE = OFF
// Power-up Timer Enable bit (PWRT disabled)
#pragma config PWRTE = OFF
// RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is 
MCLR)
#pragma config MCLRE = ON
// Brown-out Detect Enable bit (BOD enabled)
#pragma config BOREN = ON
// Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O 
function,
// HV on MCLR must be used for programming)
#pragma config LVP = OFF
// Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CPD = OFF
// Flash Program Memory Code Protection bit (Code protection off)
#pragma config CP = OFF


void main(void)
{
  uint16_t leds = 0;
  // Init IOs
  TRISA = 0;
  TRISB = 0;
  PORTA = 0;
  PORTB = 0;

  while(1)
  {
    // Calculate LED pattern
    leds = (leds << 1) | 1;
    if(leds == 0xFFFF)
      leds = 0;

    // Ouput the LED pattern
    PORTA = ((leds >> 8) & 0x1F) | ((leds >> 7) & 0xC0);
    PORTB = leds & 0xFF;

    __delay_ms(100);
  }
}

von Max H. (hartl192)


Lesenswert?

> Woran liegt es wenn ich die Delay Zeit verändere das er dann manche
> LED,s überspringt im Lauflicht?
Das kann ich mir jetzt nicht erklären. Was genau passiert? Werden immer 
bestimmte LEDs übersprungen oder wirkt es zufällig?

> // Untested
Wie hast du das vom Überspringrn dann gesehen?



PS: Für C-Code bitte die Formatierung verwenden:
1
[c]c-Code[/c]

: Bearbeitet durch User
von Sebastian A. (micropoint)


Lesenswert?

Habe den PIC nochmal neu Programmiert jetzt gehen alle LED`s, kann mir 
nicht erklären woran es gelegen hat, jetzt funktioniert es :)
1
#define _XTAL_FREQ 4000000
2
3
#include <xc.h>
4
#include <stdint.h>
5
6
// Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT
7
// pin, I/O function on RA7/OSC1/CLKIN)
8
#pragma config FOSC = INTOSCIO 
9
// Watchdog Timer Enable bit (WDT disabled)
10
#pragma config WDTE = OFF   
11
// Power-up Timer Enable bit (PWRT disabled)
12
#pragma config PWRTE = OFF     
13
// RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)
14
#pragma config MCLRE = ON      
15
// Brown-out Detect Enable bit (BOD enabled)
16
#pragma config BOREN = ON     
17
// Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function,
18
// HV on MCLR must be used for programming)
19
#pragma config LVP = OFF       
20
// Data EE Memory Code Protection bit (Data memory code protection off)
21
#pragma config CPD = OFF        
22
// Flash Program Memory Code Protection bit (Code protection off)
23
#pragma config CP = OFF      
24
25
void main(void) {
26
    uint16_t leds = 0;
27
    // Init IOs
28
    TRISA = 0;
29
    TRISB = 0;
30
    PORTA = 0;
31
    PORTB = 0;
32
33
    while (1) {
34
        // Calculate LED pattern
35
        leds = (leds << 1) | 1;
36
        if (leds == 0xFFFF)
37
            leds = 0;
38
39
        // Ouput the LED pattern
40
        PORTA = ((leds >> 8) & 0x1F) | ((leds >> 7) & 0xC0);
41
        PORTB = leds & 0xFF;
42
       
43
        __delay_ms(30);
44
    }
45
}

RA4 muss ich die LED so anschließen oder?

RA4>--470R---+5V      LED ist ON wenn RA4=H
     |
    LED
     |
    GND

von Max H. (hartl192)


Lesenswert?

Ja, LED gegen Masse.

von Sebastian A. (micropoint)


Lesenswert?

Hallo, wie kann ich die Endlosschleife "while" ändern das mir die LED´s 
an bleiben ohne aus zu gehen und von neuem zu beginnen?

von Max H. (hartl192)


Lesenswert?

Am einfachsten wäre das
1
if (leds == 0xFFFF)
2
  leds = 0;
wegzulassen

von Sebastian A. (micropoint)


Lesenswert?

Achso, okay das fuktioniert :) Max, kannst du mir noch sagen wie ich das 
Lauflicht jetzt nach einer Wartezeit wieder von neuem beginnen kann? 
Geht das auch mit delay? Aber dazu muss ich ja aus der Schleife raus 
oder?

von Max H. (hartl192)


Lesenswert?

1
void main(void) 
2
{
3
  uint16_t leds = 0;
4
  // Init IOs
5
  TRISA = 0;
6
  TRISB = 0;
7
  PORTA = 0;
8
  PORTB = 0;
9
10
11
  while (1)
12
  {
13
    // Calculate LED pattern
14
    leds = (leds << 1) | 1;
15
16
    if (leds == 0xFFFF)
17
    {   
18
      __delay_ms(WARTEZEIT);
19
      leds = 0;
20
    }
21
    // Ouput the LED pattern
22
    PORTA = ((leds >> 8) & 0x1F) | ((leds >> 7) & 0xC0);
23
    PORTB = leds & 0xFF;
24
25
    __delay_ms(30);
26
  }
27
}

So langsam könntest du aber versuchen den Code zu verstehen, drüber 
nachzudenken und so Kleinigkeiten selbst ergänzen.

: Bearbeitet durch User
von Sebastian A. (micropoint)


Lesenswert?

Vielen Dank! Funktioniert:) Ja so langsam verstehe ich immer mehr 
Befehle und deren Zusammenhang.

von Max H. (hartl192)


Lesenswert?

Sebastian G. schrieb:
> Ja so langsam verstehe ich immer mehr
> Befehle und deren Zusammenhang.
Ein gutes C-Buch oder -Tutorial kann da Wunder wirken.

von Sebastian A. (micropoint)


Lesenswert?

Hallo, wenn ich alles über 12v vom Auto Boardnetz laufen lassen möchte 
benötige ich am besten Festspannungsregler oder? Das der PIC mit 5v 
läuft und die LED´s mit Weiderständen über 12v?

von Max H. (hartl192)


Lesenswert?


von Sebastian A. (micropoint)


Lesenswert?

Hallo, geht das wenn ich die LED´s über ein ULN (ULN2803a) ansteuern 
will?

Soweit ich erfahren habe müsste ich die LED´s ja dann auf + schalten. 
Mein Microcontroller schaltet die Ausgänge ja aber auf Masse?

von Sebastian A. (micropoint)


Lesenswert?

Hallo, könnte mir jemand erkären wie das mit den Pull Up oder Pull Down 
Widerstände funktioniert? So das ich die LED´s über ein ULN2803a 
betreiben kann? Habe schon überall gesucht aber nichts gefunden.

Wäre Dankbar.

von GroberKlotz (Gast)


Lesenswert?

nichts zum Thema gefunden? Glaub ich nicht ->www.sprut.de!!

Deine MCU kann ihr Ausgaenge sowohl auf H- als auch auf L-Pegel legen!
Beispiel:
    banksel TRISB
    bcf     TRISB,RB0 ;RB0 ist Output
    banksel PORTB
    bcf     PORTB,RB0 ;RB0=Low (GND) treibt LED mit Anode an +Ub
    bsf     PORTB,RB0 ;RB0=HIGH (+Ub)treibt LED mit Kathode an GND

Pull Up bzw. Pull Down Widerstaende (intern oder extern) werden nur dann 
erforderlich wenn ein MCU-Pin als Eingang konfiguriert ist, um dort 
definierte Spannungspegel einzustellen.

Ist ein Port-Pin als Ausgang konfiguriert ist dort grundsaetzlich kein 
Pull Up bzw Pull Down erforderlich. Ausnahme: wenn es sich um einen 
"open drain"-Ausgangspin handelt wie z.B. beim PIC16F628 PORTA,RA4 
(Idrain max. ca. 30mA).

Schau Dir doch mal diese Erlaeuterungen an zu den Portpins an:
www.sprut.de/electronic/pic/grund/grund.htm#1

Abgesehen von RA4 brauchst Du also keine Pull-Ups/Pull-Downs wenn Du den 
ULN2803 verwendest.

mfG GroberKlotz

von Sebastian A. (micropoint)


Lesenswert?

Hallo, ah okay, danke schonmal. Das bedeutet ich kann alle Ports Direkt 
mit dem ULN betreiben bis auf den RA4 ?

Wie sieht das dann in der C Programmierung aus? TRISA muss dann 1 sein?
1
void main(void) {
2
    
3
    uint16_t leds = 0;
4
    // Init IOs
5
    TRISA = 0; 
6
    TRISB = 0;
7
    PORTA = 0;
8
    PORTB = 0;
9
    
10
    
11
    
12
    while (1) {
13
        
14
        // Calculate LED pattern
15
        leds = (leds << 1) | 1;
16
17
18
        // Ouput the LED pattern
19
        PORTA = ((leds >> 8) & 0x1F) | ((leds >> 7) & 0xC0);
20
        PORTB = leds & 0xFF;
21
       
22
        __delay_ms(13);
23
    }
24
}

von Sebastian A. (micropoint)


Lesenswert?

Kann mir da keiner mehr Helfen? Habe mein Projekt fast fertig, es 
scheitert nur noch an dem ULN... Leider finde ich nichts im Internet wie 
ich in C es umprogrammiere?

Wäre sehr sehr dankbar wenn ihr mir da nochmal Hilfe geben könntet.

von Thomas E. (picalic)


Lesenswert?

Sebastian G. schrieb:
> Habe mein Projekt fast fertig, es
> scheitert nur noch an dem ULN... Leider finde ich nichts im Internet wie
> ich in C es umprogrammiere?

Der ULN2803 kann keinen C-Code verarbeiten, sondern nur simple 
Logikpegel - was soll man dann im Internet zu "C Programmierung ULN2803" 
finden?
Wo ist das Problem? Funktioniert Dein o.a. Programm nicht? Oder traust 
Du Dich nur nicht, es auszuprobieren? Warum meinst Du, daß TRISA auf 1 
sein muss?

von Sebastian A. (micropoint)


Lesenswert?

Mir ist klar das ich den ULN nicht programmieren kann, ich meine den 
Controller Umprogramieren das meine LED´s auf +Ub geschalten werden. 
Meine LED´s gehen momentan ja vom Controller auf GND, so wie ich das 
verstanden habe müsste es aber umgekehrt sein um den ULN direkt 
anzuschließen. Andernfalls bräuchte ich Pull up, Pull down Widerstände? 
Oder wie schließe ich sonst den ULN an das er läuft?

Microcontroller + Ub -> ULN2803a -> LED -> GND (Funktioniert ja so 
nicht?)

Ich habe schon so viel gesucht im Internet aber zu dem Thema finde ich 
irgendwie keine klare Antwort...

: Bearbeitet durch User
von Thomas E. (picalic)


Lesenswert?

Sebastian G. schrieb:
> ich meine den
> Controller Umprogramieren das meine LED´s auf +Ub geschalten werden.

Das ist aber die Verschaltung der Hardware - das kann man nicht im 
Controller per Software ändern, sondern nur mit Draht und Lötkolben!
An der Programmierung im Controller ändert sich überhaupt nichts: Wenn 
der Controller eine "1" ausgibt (High-Pegel), schaltet dort 
angeschlossene Treiber des ULN auf "Ein" (= schaltet seinen Ausgang nach 
Masse) und eine LED zwischen +Vb und dem Ausgang leuchtet.

von Sebastian A. (micropoint)


Angehängte Dateien:

Lesenswert?

Hier mal ein schnell gezeichneter Schaltplan. Widerstände fehlen noch.

Wäre das so richtig?

von X4U (Gast)


Lesenswert?

Sebastian G. schrieb:
> Hier mal ein schnell gezeichneter Schaltplan. Widerstände fehlen
> noch.
>
> Wäre das so richtig?

Es fehlen noch die LED Vorwiderstände, der Anschluss für den Progger, 
der Reset-Pullup  und die Abblockkondensatoren.

Ist zwar ne Geschmacksfrage  aber Leds schalte ich (wie alles was 
Leistung braucht) wenn möglich gegen plus. Ist einfacher da die Treiber 
meist open collector Ausgänge gegen plus haben (so wie der ULN2003). Das 
würde bei deiner Schaltung z.B. dafür sorgen das Die LEDs auch leuchten 
wenn der Pic das will ;-).

von Sebastian (Gast)


Lesenswert?

Ich glaube das werde ich niemals so hinbekommen, ich weiß weder was 
"progger" oder "reset-pullup's" sind, geschweige denn 
abblockkondensatoren?? Bin kein Elektriker.

von X4U (Gast)


Lesenswert?

Sebastian schrieb:
> Ich glaube das werde ich niemals so hinbekommen, ich weiß weder was
> "progger" oder "reset-pullup's" sind, geschweige denn
> abblockkondensatoren??

Such mal ein paar Standardschaltungen für den Pic 16F628 im Netz.

> Bin kein Elektriker.
Versuch macht kluch

X4U schrieb:
> wenn möglich gegen plus
Korrektur meinerseits:
Gemeint ist das die Led an Plus hängt (mit Vorwiderstand in Reihe). Von 
dort geht es in den ULN2003 (der immer gegen minus schaltet).

von GroberKlotz (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Sebastian
Meine Antwort [Beitrag "Re: Einsteiger Hilfe zu PIC PIC16F628A"] vom 
5.12.2015 bezog sich natuerlich auf die Ausgaenge des PIC!

An den Ausgaengen des ULN2803A brauchst Du UNBEDINGT VORWIDERSTAENDE 
fuer die LEDs sonst raucht Dir der ULN2803 samt LEDs ab!

Mit der beigefuegten Beschaltung von EINER Treiberstufe im ULN28003A 
solltest Du zurechtkommen. Ich habe die Pinnummern der Treiberstufe 
hinzugefuegt. Die Versorgungsspannung des ULN (z.B +5V wird mit Pin 10 
und GND (0V) wird mit Pin 9 verbunden.
ALLE LEDs 1-8 werden MIT VORWIDERSTAND zwischen Treiberausgang (Pin 
11-18) und +Ub (z.B +5V) geschaltet.

Du brauchst die anderen Treiberstufen 2-8 in gleicher Weise wie die 
dargestellte Treiberstufe 1 zu beschalten. Du wirst sehen es 
funktioniert!
Ein H-Pegel am Ausgang des PIC schaltet den Treiberausgang auf Low (0V) 
und damti die LED ein!
Ein L-Pegel am Ausgang des PIC schaltet die LED aus.

Stoere Dich nicht an der sichtbaren Innenbeschaltung des Treibers, der 
haelt sich genau an die Vorgaben aus dem Datenblatt des ULN28003A und 
war notwendig um das "Oszillogramm" zu erstellen.

Beachte auch das zugehoerige "Oszillogramm" mit den relevanten 
Spannungs- und Stromwerten. Das Schaltbild und das "Oszillogramm" wurden 
mit dern kostenlosen Software LTSpiceIV erstellt.

mfg GroberKlotz

von GroberKlotz (Gast)


Lesenswert?

sorry die Beschriftung der Schaltung "ULN2805" ist falsch, muesste 
natuerlich richtig ULN28003A benannt sein.

von X4U (Gast)


Lesenswert?

GroberKlotz schrieb:
> Beachte auch das zugehoerige "Oszillogramm" mit den relevanten
> Spannungs- und Stromwerten.

Bei diesen Werten kann er sich den ULN aber sparen weil der PIC pro 
Ausgang 25mA liefert und eine Summenstrom von 250mA verträgt.

Siehe Datenblatt: 17.0 ELECTRICAL SPECIFICATIONS -> Absolute Maximum 
Ratings

von Sebastian A. (micropoint)


Lesenswert?

X4U schrieb:
> GroberKlotz schrieb:
>> Beachte auch das zugehoerige "Oszillogramm" mit den relevanten
>> Spannungs- und Stromwerten.
>
> Bei diesen Werten kann er sich den ULN aber sparen weil der PIC pro
> Ausgang 25mA liefert und eine Summenstrom von 250mA verträgt.
>
> Siehe Datenblatt: 17.0 ELECTRICAL SPECIFICATIONS -> Absolute Maximum
> Ratings


Also könnte ich es auch ohne ULN theoretisch laufen lassen, ohne das 
mein PIC Überstrapaziert wird?

von GroberKlotz (Gast)


Lesenswert?

Sebastian G. schrieb:
> Also könnte ich es auch ohne ULN theoretisch laufen lassen, ohne das
> mein PIC Überstrapaziert wird?

JA! Du musst aber die im Datenblatt angegebene maximale Stromaufnahme 
des PIC beachten!

z.B. PIC 16F628 Datenblatt ab Seite 135 (absolute Grenzwerte!):
a) Maximal 25mA je Pin
b) aber nicht mehr als 300mA durch den GND-Pin (z.B. alle LEDs nach +Ub 
geschaltet)
c) bzw. nicht mehr als 250mA in den Vdd-Pin (z.> Alle LEDs nach GND 
geschaltet
b,c inclusive des Eigenbedarfs des PIC!

Auf S. 138 kannst Du ablesen welchen Strom der PIC typisch fuer seinen 
Eigenbedarf aus dem Vdd-Pin zieht (z.B. max. 5mA im HS-Oszillator-Mode)

Wenn Du also z.B den Vorwiderstand so bemisst, dass nur 10mA durch eine 
LED fliesst, liegst Du  bei 16 LEds x 10mA = 160mA + 5 mA auf der 
sicheren Seite und Du kannst auf den ULN2803 verzichten.

Heutzutage sind LEDs erhaeltlich die schon mit <10mA fast unertraeglich 
hell strahlen!

Vom Grenzwert 300mA, bzw. 250mA wuerde ich aus Gruenden der 
Betriebssicherheit deutlichen Abstand halten!

mfG Grober Klotz

P.S. Du musst Dir angewoehnen Datenblaetter zu lesen und zu verstehen!

von Sebastian A. (micropoint)


Lesenswert?

Vielen Dank GroberKlotz für die Info.

Ich habe jetzt noch das Problem das wenn der Pic Stromlos wird, die 
ersten beiden LED´s noch kurz nachleuchten, im Millisekunden bereich 
zwar, aber man sieht es - Müsste ja an den Kondensatoren liegen?. Gäbe 
es dafür eine Lösung? Habe überlegt mit dem RA5/ MCLR zu Resetten dann. 
Aber da die Schaltung ja Stromlos ist wird das Schwer.?

von X4U (Gast)


Lesenswert?

Sebastian G. schrieb:
> Ich habe jetzt noch das Problem das wenn der Pic Stromlos wird, die
> ersten beiden LED´s noch kurz nachleuchten, im Millisekunden bereich
> zwar, aber man sieht es - Müsste ja an den Kondensatoren liegen?

Dafür gibt es BOR (brown out detection). Die springt an wenn die 
Spannung eine kurze Zeit zu klein ist und resettet den Pic.

Wird über das configuration register beim flashen aktiviert. Im PCON 
Register steht dann wer den letzten reset ausgelöst hat.

von Sebastian A. (micropoint)


Lesenswert?

X4U schrieb:
> Sebastian G. schrieb:
>> Ich habe jetzt noch das Problem das wenn der Pic Stromlos wird, die
>> ersten beiden LED´s noch kurz nachleuchten, im Millisekunden bereich
>> zwar, aber man sieht es - Müsste ja an den Kondensatoren liegen?
>
> Dafür gibt es BOR (brown out detection). Die springt an wenn die
> Spannung eine kurze Zeit zu klein ist und resettet den Pic.
>
> Wird über das configuration register beim flashen aktiviert. Im PCON
> Register steht dann wer den letzten reset ausgelöst hat.


#pragma config BOREN = ON

Ist bei mir aktiviert.

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.