PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] PIC Neueinsteiger erbittet Hilfe



oderlachs
09.04.2016, 13:58
Hallo Freunde !

Obwohl die Atmel Chips bei mir die die Hauptrolle spielen , habe ich doch für meine Rentnertage mit es was für PIC Chips "bewaffnet" ;)

PicKit3 von Sure-Elektronics als Programmer

EasyPIC40 von LogiFind als Entwicklerbord (4MHz Qu.)

Chip : PIC16F877A

Als Software nutze ich das MPLab von Mikrochip unter Assembler.
Ich habe zwar schon Assembler programmiert, dieses aber sehr Chip abhängig ist, wollte ich hier herzlich darum bitten,
ob mir wer bei der Erstellung des ersten Programms behilflich sein kann.

Am RB PORT, als Eingang, liegen 8 Taster und an PORT RD als Ausgang 8 LED.
Nun will ich versuchen das die LED mittels Taster geschaltet werden.

Ich habe noch nicht recht wirklich irgendwo eine Programmiervorlage gefunden mit der ich mal was anfangen könnte.

Kann nicht bitte mal Jemand mir einen kleinen Programmanfang entwerfen, den ich als Grundlage dann weiter nutzen und für mich ändern kann ?
Vor allem käme es mir auf dem Programmkopf an wo ja diverse Einstellungen/Grundwerte des Programms vorgegeben werden.

In der Hoffnung auf etwas Hilfe
verbleibe ich dankend mit den besten Grüssen

Gerhard

hans99
09.04.2016, 15:32
Hallo Gerhard,

deinen Elan in allen Ehren. Ich habe das Hobby schon vor einiger Zeit aufgegeben.

Vielleicht hilft Dir diese Seite weiter:

http://www.sprut.de/electronic/pic/assemble/assembler.html


Hier, weiter unten ist eine .asm Datei:

http://www.michael-floessel.de/mfblog/pic-programmieren-mit-mplab-teil-2-und-pic-12f675/


Hier gibt es auch einiges zum anschauen:

http://www.repaircafe-eu.com/picasm.htm

Schönes Wochenende noch.

oderlachs
09.04.2016, 17:20
Danke Hans !

Ja der eine schaut Formel1 der andere Fussball usw....ich erfreue mich daran wenn mal eine Programmierung klappt :)
Ja das ist wie Kreutzworträtselraten für mich, wenn ichs geschaft bin ich "glücklich" .

Nun habe ich versucht mal einen fast zutreffenden Code auf meine Bedürfnisse zuzuschneiden, Compilierung klappt ohne Fehler , Programmierung(Flash) allles bestens, nur gehen tut nix ... :(

Hier ich der Code (http://oderlachs.de/forum/code/led_tast_test_1.asm) den ich verwendete , die Profis werden bestimmt lachen aber finde mich da kaum zurecht, nach Fehlern zu suchen....

Na vieleicht wirft wer mal ein Auge auf den Code...

Gerhard

witkatz
09.04.2016, 19:55
Hallo Gerhard,

die PORTD Pins sollten über das TRISD Register als Ausgang konfiguriert werden, z.B mit "clrf TRISD".

Ausserdem solltest du zum __CONFIG den Schalter "& _LVP_OFF" hinzufügen, es sei denn du verwendest die LowVoltage Programmierung.
In MPLAB kommst du über "Window" -> "PIC Memory Views" -> "Configuration Bits" zu einer Übersicht der ConfigBits (entspricht wohl den Fuses der AVRs). Hier kannst bequem alle ConfigBits im HighLevel Dialog einstellen und eine Codezeile für deinen Quellcode erstellen lassen.

Gruß
witkatz

Peter(TOO)
09.04.2016, 22:34
Hallo Gerhard,

Als Software nutze ich das MPLab von Mikrochip unter Assembler.
Ich habe zwar schon Assembler programmiert, dieses aber sehr Chip abhängig ist, wollte ich hier herzlich darum bitten,
ob mir wer bei der Erstellung des ersten Programms behilflich sein kann.

Ich frage mich natürlich schon, wieso soll es Assembler sein?

Die Speicherverwaltung wird in Assembler recht schnell etwas unübersichtlich.

MfG Peter(TOO)

oderlachs
10.04.2016, 09:19
Ja Peter , das habe ich mich auch gefragt.
Alles was ich über PIC fand war Assembler und C Compiler(IDE) sind nun mal kostenpflichtig und das nicht mal wenig. Wie gesagt befasse ich mich mit ca 2 Wochen ein wenig mit dem PC, eigentlich gedachte ich im gewohnten C/C++ weiter zu programmieren wie unter AVR.
Ich bin offen für jede Anregung, doch es muss doch wohl einem Neuling möglich sein, mal ein paar LED leuchten zu lassen oder blinken wenn ich auf 'ne Taste drücke...
Habe da solch Buch von Franzies "Das grosse PIC.Buch" aber zum Programmieren lernen ist das nix, ich sehe das eher eine Zusammenfassung von PIC Datenblättern und PIC-Kits Beschreibungen...

Da sind zwar jede Menge von Befehle gelistet und anderes , aber was das alles bedeutet kann man sich aus den Fingern saugen..

Gerhard

PICture
10.04.2016, 09:40
Hallo!

Das könnte helfen: http://rn-wissen.de/wiki/index.php?title=PIC_Assembler#Das_erste_Programm ;)

oderlachs
10.04.2016, 10:53
Hallo Picture, danke für den Tip, da habe ich auch schon recherchiert und bin nicht weiter gekommen.
Nun habe ich mal von Sprut ein Beispiel getestet, nur Fehler beim compilieren...
Hier der Code (http://oderlachs.de/forum/code/lauf.asm)
Vielleicht hat der PIC16F877A eine Sonderstellung ;) am besten Mülltonne auf und wech den mist.... Schade nur ums Geld :(

Na ja so schnell gebe ich nicht auf, kommen ja noch Regentage die man am PC verbringt so wie Heute :)

Gruss
Gerhard

morob
10.04.2016, 11:54
hallo,

der xc8 ist kostenfrei, genau wie MPLab X.
assembler das letzte mail bei einem z80 :D

sprut.de ist einer der besten seite die ich zu pic kenne.

gruß
morob

- - - Aktualisiert - - -


Hallo!

Das könnte helfen: http://rn-wissen.de/wiki/index.php?title=PIC_Assembler#Das_erste_Programm ;)

danke für den tip

oderlachs
10.04.2016, 13:38
Hallo morob !

Das Du auch hier antwortest habe ich ja nicht gedacht...die welt ist eben klein so "trifft" man sich wieder.
Hoffe der Raketentechnik geht es gut und voran...

Ja Sprut ist schon was gutes und vor allem für solche Fast_Nur_Deutsch_Sprecher wie mich.

Ich habe aber jetzt mal ein Codebeispiel aus meinem Buch "Programmieren von PIC-Microcontrollern (PIC16F84A)" genommen , der Code HIER (http://oderlachs.de/forum/code/blinky2.asm)

Ich habe es eigentlich ganz gut "umgestrickt" bekommen auf meine Bedürfnisse, nur konnte ich den geplanten PORT D nicht nutzen, also B in D einfach umschreiben, auch kann ich nur 4 LEDs "zählen" lassen, nicht wie gewollt alle 8.

Ich wollte PORTD wählen weil das so auf dem Board so vorgesehen ist, so musste dann aber umverkabeln... :(

Vieleicht hat ja wer noch einen hilfreichen Tip für mich.

Den C-Compiler von MicroChip habe ich mir ja downgeladen, aber wo bekomme ich heraus welche Libs ich wo einsetze und wie die sich nennen ?

Nun ja kommt Zeit kommt Rat....

Assembler habe ich eigentlich zuletzt zu C-64 Zeiten und dann in der IT Ausbildung an solch 8085 Entwickler System geschrieben....
Nun ja an solch Uralt AT PC mit nem 8086, habe ich dort auch noch experimentiert, neben Turbopascal 6/7


Gruss Gerhard

Unregistriert
10.04.2016, 14:19
Schon beachtet, was witkatz geschrieben hat?



die PORTD Pins sollten über das TRISD Register als Ausgang konfiguriert werden, z.B mit "clrf TRISD".

Ausserdem solltest du zum __CONFIG den Schalter "& _LVP_OFF" hinzufügen, es sei denn du verwendest die LowVoltage Programmierung.
In MPLAB kommst du über "Window" -> "PIC Memory Views" -> "Configuration Bits" zu einer Übersicht der ConfigBits (entspricht wohl den Fuses der AVRs). Hier kannst bequem alle ConfigBits im HighLevel Dialog einstellen und eine Codezeile für deinen Quellcode erstellen lassen.

Gruß
witkatz

morob
10.04.2016, 15:42
hallo,

noch was deutsches :) http://pic-projekte.de/wordpress/?p=133 einführung c für pic.
das problem ist das ich bei pic nie assembler gemacht habe.

gruß
morob

ps die modellraketen fliegen noch, im juni und oktober :)

oderlachs
10.04.2016, 17:30
Hallo Freunde !

Vielen Recht herzlichen Dank für Eure Unterstützung. ich habe es nun geschafft ein lauffähiges Codebeispiel zu stricken. das Grundgerüst stammt sich aus einem Franzies Buch : Programmieren von PIC- Mikrocontrollern von Dieter Kohtz.
Nach dem auch irgendwas mit der *,inc Datei nicht recht gestimmt hatte, habe ich es nun geschafft, das die 8-LED binär "zählen" . Auch konnte ich jetzt den auf dem Entwickler Board vorgegebenen PortD nutzen.

Hier nun der CODE (http://oderlachs.de/forum/code/led_lauf.asm) sollte wer noch etwas verbesserungswürdiges finden, bin ich über jede Info sehr dankbar :)

Nochmals besten Dank und Grüsse


Gerhard

witkatz
10.04.2016, 21:07
Im Buchbeispiel wird das PORTD durch setzen des TRISD auf 0 als Ausgang konfiguriert. Den Hinweis (nach meinem Studium deines ersten Quellcodes) hattest du schon gestern von mir...

Mit dem __CONFIG stellst du immer noch nicht alle Config Bits des PIC877A ein, warum? Dabei bietet das MPLAB einen bequemen Dialog an - mit aussagekräftigen Kommentaren zu allen Config Bits.

Was mir an deinen Config Bits zu denken gibt:
- die Oszillator-Option war im ersten Programm HS, jetzt auf einmal XT, hat das einen Grund? Was ist richtig? (Datenblatt beisst nicht ;-) )
- LVP ist standardmäßig an, so lange du nicht das Config Bit auf _LVP_OFF setzt. Damit ist bei dir der RB3 Pin dem LVP Programmieren zugeordnet und muss entspr. beschaltet werden. Ist das so gewollt? (Datenblatt beisst nicht :-) )

Gruß
witkatz

Peter(TOO)
10.04.2016, 22:42
Hallo Gerhard,

Wie gesagt ist der XC8 gratis, optimiert aber weniger als die kostenpflichtige Variante.

Mein letzter Assembler war für ein Multitasking-Betriebssystem. Ist aber nur eine einzelne kleine Funktion, welche die Register auf dem aktuellen Stack rettet, den SP des neuen Tasks lädt und dann die geretteten Register von diesem wieder lädt. Alles andere ist in C geschrieben.

Angefangen habe ich mal auf einem KIM-1 (6502), ist dieses Jahr auch schon 40 Jahre her....

MfG Peter(TOO)

Klebwax
11.04.2016, 00:28
Wie gesagt ist der XC8 gratis, optimiert aber weniger als die kostenpflichtige Variante.

Da gibts ne preiswerte Alternative: Man nimmt einen modernen PIC24. Der ist mit seinen 16 Bit und seiner höheren Clock wesentlich schneller und in vergleichbarer Ausführung meist auch noch billiger. Der PIC24FV32KA304 z.B. hat 16 16-Bit Mips statt 5 8-Bit Mips des 16F877 bei größerem Speicher und wesentlich geringerem Preis. Da kann der Optimizer des XC8 machen, was er will, an den billigeren PIC24 wird er nie herankommen. Beim Programmieren machts keinen Unterschied, C ist eben C. Und wenn man sowieso neu anfängt, kann man auch einen neuen Chip nehmen.

MfG Klebwax

oderlachs
11.04.2016, 09:31
Hallo Freunde ich möchte mich auch für die letzten Beiträge/Antworten herzlich bedanken.

Klebwax,
ja warum nicht Pic24, das ist folgendermaßen, weil meine Entwicklungsumgebung(DeveloperBoard) für den 40 Pinner PIC16F877A u.ä. ist. Ich mache das ja nur um mal Programmieren zu können, mir schweben,da keine grosse Projekte vor die praktisch real verwirklicht werden...für mich ist das Programmieren, wie für andere Menschen das Kreuzworträtsel...gelöst, weg und was neues.
Also mir geht es darum eine vorgestelle Programmieranwendung zu lösen und fertig ist's....

Witkatz,

ja ich habe mich um das __config gekümmert, aber alles kann ich nicht gleich wissen, habe bislang noch nichts darüber gefunden wo steht wann ich LVP setzen muss oder wann nicht... Tut mir leid wen ich Dich enttäuschen muss.
Eben so mit der Tackteinstellung/Oszillator.
Ich hatte anfangs erwähnt das ich erst mal ein Progbeispiel genommen habe aus dem Web, um mich daran einzuarbeiten.
Ich hatte ja auch geglaubt, dass in eine Buch was sich "Das Grosse PIC-Buch" nennt , auch der Aufbau einens Programmes erscheint, aber leider gefehlt. Wie soll ich da wissen was wo geschrieben werden muss und was nicht,
das ist mir leider nicht mit der Muttermilch mitgegeben worden ;)


Nun ich werde mich schon weiter drein finden, denke ich dauert dann etwas länger, habe je viele Prog Beispiele für den Pic16F84a und auch ein Heftchen dazu, da muss ich eben umstricken und damit leben..etwas Blind durch den Code zu "fahren".

Vielen Dank weiter für Eure Hinweise, die ich dankend beherzigen werde...

Gerhard

witkatz
11.04.2016, 09:57
@Klebwax:
Gerhard hat alles, was er zum Reinschnuppern und Kennenlernen der PIC Welt braucht und wir helfen ihm dabei. Warum sollte er jetzt schon nach Alternativen suchen?
- falls er mal seinen 16F877A killen sollte, ein Ersatzchip ist billig. Ein PIC16F887 kostet bei Ebay gerade mal 1,60€ incl. Versand aus China (http://www.ebay.de/itm/PIC16F887-I-P-PIC16F887-DIP40-MICROCHIP-IC-NEW-GOOD-QUALITY-/291549782795?hash=item43e1b8a30b:g:dkAAAOSwajVUNdg y)
- auf sein EasyPic40 passen andere 40 Pin PIC16F und PIC18F drauf. Es gibt viele modernere, besser ausgestattete und schnellere 8bit PIC Typen, mit denen er auf dem selben Testbrett experimentieren kann.
- PIC16F877A lässt sich in ASM und C mit kostenlosen Standardmitteln von Microchip programmieren.

- - - Aktualisiert - - -


habe bislang noch nichts darüber gefunden wo steht wann ich LVP setzen muss oder wann nicht...
Das Low Voltage Programming ist im Datenblatt des PIC16F877A beschrieben. EasyPic40 unterstützt es wahrscheinlich nicht, also bitte abschalten, bevor der PIC mit jedem Tastendruck am RB3 in den Programmiermodus geht und Probleme macht. Noch schlimmer ist aktivierter LVP und unbeschalteter RB3, der sporadisch in Richtung Vdd floatet - ein beliebter Anfängerfehler, der viel Frust bringen kann.

Die Programm-Beispiele wurden bestimmt auf einer anderen Hardware erstellt. Deswegen sollte man die Config Bits immer anhand des Datenblatts an die eigene Hardware anpassen. Der Einstelldialog in MPLAB hilft dabei ungemein.
Die Oszillatormodes XT und HS würden zu 4MHz Quarz beide passen. Für schnellere Quarze sollte man HS setzen. Das steht auch im Datenblatt - im Kap. 14.2 Oscillator Configurations.

Wenn du irgendwas von meinem Geschreibsel nicht verstehst, frag ruhig nach - gerne auch per PN. Ich helfe dir gerne, so lange ich Zeit finde. Und vielleicht berichtest du mal über deine PIC Experimente hier im Forum oder im Blog - mich würd's freuen.

oderlachs
11.04.2016, 11:12
Danke Witkatz, werde mich bemühen Folge zu leisten, der RB3 ist mit LED /Rvor beschaltet, der Qu ist 4MHz

Gerhard

witkatz
11.04.2016, 13:20
der RB3 ist mit LED /Rvor beschaltet, der Qu ist 4MHz
OK, also kein LVP.
Im Anhang ein auf die Schnelle erstelltes C-File für XC8 mit der gleichen Funktion und dem gleichen Ablauf wie das von dir gepostete ASM Beispiel. Nur so für einen schnellen Vergleich ASM vs. C ;-)

Klebwax
11.04.2016, 13:32
@Klebwax:
Gerhard hat alles, was er zum Reinschnuppern und Kennenlernen der PIC Welt braucht und wir helfen ihm dabei. Warum sollte er jetzt schon nach Alternativen suchen?
- falls er mal seinen 16F877A killen sollte, ein Ersatzchip ist billig. Ein PIC16F887 kostet bei Ebay gerade mal 1,60€ incl. Versand aus China (http://www.ebay.de/itm/PIC16F887-I-P-PIC16F887-DIP40-MICROCHIP-IC-NEW-GOOD-QUALITY-/291549782795?hash=item43e1b8a30b:g:dkAAAOSwajVUNdg y)
- auf sein EasyPic40 passen andere 40 Pin PIC16F und PIC18F drauf. Es gibt viele modernere, besser ausgestattete und schnellere 8bit PIC Typen, mit denen er auf dem selben Testbrett experimentieren kann.
- PIC16F877A lässt sich in ASM und C mit kostenlosen Standardmitteln von Microchip programmieren.

Außer dem vorhandenen Evalboard gilt das alles auch für die PIC24. Auch der XC16 ist kostenlos. Und wenn man noch garnicht wirklich angefangen hat ist es eigentlich auch keine Alternative. Ich muß aber zugeben, ein Evalboard hab ich nicht benutzt. Einen PIC24 im DIP aufs Steckbrett, 5 Drähte zum PICKit, und losgelegt.

Aber eigentlich gings mir um das allgemeine Gesinge wegen die fehlende Optimierung beim kostenlosen XC8. Das würde einen ja geradezu zu Assembler zwingen. Das sollte man sich nicht antun. RISC Prozessoren sind immer dafür gemacht worden, von einem Compiler mit Code versorgt zu werden und die historisch bedingte Speicherarchitektur der "kleinen" PICs macht das nicht besser. Seitdem es einen funtionierenden C-Compiler gibt, muß man sich Assembler nicht mehr antun. Und wenn einem der Bums fehlt, ist es besser einen schnelleren Prozessor zu nehmen.

Was mir an den PIC24 gefällt, ist halt ihre größere Leistung. Allfällige Tricks wie Malnehmen und Teilen durch shifts zu ersetzen, printf() oder floating point zu vermeiden, keine Calls im Interrupthandler zu machen etc. sind nicht notwendig und machen auch keinen Sinn. Man kann das, was man in C lernt, gut auf dem PC wiederverwenden wie man genauso C Erfahrung und Algorithmen vom PC übernehmen kann.

Wenn man anfängt, kann man sich das noch leicht überlegen. Und wenn man C lernen will, ist der PC auf jeden Fall die bessere Spielwiese, wo man weiß, daß die Hardware funktioniert und die Tools mächtiger und die Tutorials auch in Deutsch zahlreicher sind. Das spart viel Frust. Ist aber alles nur meine persönliche Meinung, gespeist auch aus vielen Threads, die ich verfolgt habe.

MfG Klebwax

oderlachs
11.04.2016, 13:32
Hallo Witkatz !
Recht herzlichen Dank für Deine Mühen !!!! Freut mich sehr Deine Hilfsbereitschaft. Ich habe nun per MPLab das Config erstellen lassen und einkopiert....
Dann hatte sich ein Pinbruch im PIC eingeschlichen weiß der Kuckuck warum woher , RD 2 war plötzlich tot. Chip gewechselt alles bestens , ich dacht schon ich hätte mich mit dem _config den Chip zerschossen.

Werde nachher den Code testen und berichten...

Danke
Gerhard

Nachtrag:
Klebwax war schneller als ich beim Antworten....
ja es geht mir ja nur um dieses Board mit dem PC16F877A drauf, ich möchte ja nur damit ein wenig Programmieren. Die Anwendungen, die mir dieses Board gewährt reichen mir mir vollkommen.
Mir geht es darum das Programmieren von PIC s so ein bischen zu verstehen und reinschnuppern.
Aus Gesundheitlichen Gründen (Augen und Finger) kann ich selber keine Hardware, wie Leiterplatten nicht mehr herstellen , ginge das noch wär das ein Volltreffer für mich.
Diese professionell herstellen zu lassen , liegt in keinem Rahmen der Rentabilität.
Ich habe noch ein anderen Progger den JDM 2 sowas ganz einfaches und von ByVac solch ByPic mit 28er Sockel, aber das ist immer ein Heidentheater das zusammenzustricken damit es läuft. habe das mal wegen dem PIC 16F84A gekauft weil ich da das Buch habe, bin aber nie so richtig klar gekommen.
So habe ich mir dann das Easy-PIC 40 und PICKIT3 geleistet, um damit zu experiementieren...

Hier noch der Link zur Boardbeschreibung (http://logifind.oss-cn-hongkong.aliyuncs.com/dev_board/easyPIC-40.rar)

Ich hoffe nun ist mein ganzes Tun und Wollen und warum gerade Dieses erklärt.

Hallo Witkatz, habe dein main.c verwendet, wunderbar :) !!! Vielen Dank!!!! Nun kann ich ja experimentieren, wie ich gern möchte, natürlich werde ich mich auch weiter mit Assembler befassen, weil ich ja was zum Zeitvertreib haben möchte , was mir auch Freude macht....

Gruss und Danke

Gerhard

Siro
20.04.2016, 17:07
Hallo, was mir eben auffiel:

Um auf dem Port D einen Wert von 0..255 laufen zu lassen,
brauche ich doch keine Abfrage ob der incrementierte Wert bei 255 angekommen ist
um ihn dann auf 0 zu setzen...
Ich zähle einfach immer weiter. Wenn ich ein Byte um eins erhöhe und es steht auf 255
dann wird es doch automatisch zu 0. Da brauche ich keine Abfrage für.

Also in C:

while(1)
{
PORTD++;
__delay_ms(10);
}

oder in Assembler:



loop:
call pause ; warten
incf PORTD,f
goto Loop


Siro