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
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.
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
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/
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.
@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....
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
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
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. :-)
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
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
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.
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
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?
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 ;)
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.
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...
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.
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
Teutschlehrer schrieb:> Sebastian G. schrieb:>>> Assambler>> Das Dingens heisst Assembler.>> Das schreibst Du jetzt 100 mal...
Entschuldige, ist mir nicht aufgefallen.
Assembler :)
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.
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 ;-)
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?
Автомат Калашникова 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.
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
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.
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
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
@ 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
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.
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.
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?
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?
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
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
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
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
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);
}
}
> 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:
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?
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?
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?
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.
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
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?
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.
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?
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...
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.
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 ;-).
Ich glaube das werde ich niemals so hinbekommen, ich weiß weder was
"progger" oder "reset-pullup's" sind, geschweige denn
abblockkondensatoren?? Bin kein Elektriker.
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).
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
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
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?
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!
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.?
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.
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.