Also ich persönlich benutze ASM infos dazu findest du auf sprut.de
Andere alternativen wehren für C: css, hitec-c, cxx5 und noch einige andere.
Grafisch gibt es: ktechlab(flowchat), Parsic
und dann hatte ich irgentwo noch basic und pascal gesehen.
Guten Tag zusammen,
Ich hab da in Bezug auf PIC und Software ein paar kleine Fragen, die ihr mir sicher recht schnell beantworten könnt, und dann kann dieser Thread auch sicher schnell "nach unten durchgeschoben" werden....
Also, ich hab den Picstart-Plus damals in so ner "ich will Prozessor programmieren"-Phase gekauft.... lange her.
Inzwischen ist mir die Schachtel mit dem Programmiergerät wieder in die Hände gefallen und nach etwas Suchen, bin ich auch auf dieses Forum gestossen.
Wenn ich mir Assembler so ansehe, bekomme ich Bauchweh und würde das Programmiergerät am liebsten wieder weglegen. Genau das soll aber nicht passieren *GGGG*
Basic ? C ? C++?
Mit welcher Programmiersoftware programmiert ihr so rum ?
Ist C oder C++ schwer zu lernen ?
Könnt ihr mir verständliche Bücher empfehlen, die den "Einstieg" einigermassen erträglich machen ?
Falls weitere Fragen auftauchen, werd ich die bei Gelegenheit noch beifügen.
Gruß
Alex
Also ich persönlich benutze ASM infos dazu findest du auf sprut.de
Andere alternativen wehren für C: css, hitec-c, cxx5 und noch einige andere.
Grafisch gibt es: ktechlab(flowchat), Parsic
und dann hatte ich irgentwo noch basic und pascal gesehen.
Legastheniker on Bord !
Ich finde, dass Du asm lernen solltest bevor Du anfängst einen PIC in einer Hochsprache zu programmieren.
Natürlich musst Du kein Profi werden in Assembler, um jedoch den Microcontroller zu verstehen wäre es von Vorteil einige Programme in asm zu schreiben.
Danach fällt es Dir leichter zum Beispiel in C zu programmieren.
Enige Routinen müssen sogar in asm geschrieben werden, vor allem bei zeitkritischen Vorgängen.
Eine Hochsprache erzeugt einen Code der oft viel zu lahm ist für eine gegebene Anwendung.
Also heisst es, Assembler (ASM ?) lernen ??
MP-LAB ist ja schliesslich dabei gewesen...
Naja, dann muss ich da wohl durch.
Gibts es denn da ein paar Tips für leicht verständliche Bücher oder so ?
Hab da eben auf der Sprut-Seite noch was gesehen.......
Da ich grad nächste Woche ein paar 16F628A bekomme.... heisst das, daß ich im Grunde gar keinen externen Oszillator anschliessen muss und das Ding läuft trotzdem ??interner Oszillator (z.B. 16F62x 16F62xA 12F6xx und andere) (INTRC bzw. INTOSC)
Im INTRC-Mode wird ein interner 4-MHz-Oszillator verwendet, der leider nicht sehr stabil ist (3,65 ... 4,28 MHz). Dafür benötigt er keinerlei externe Bauelemente, und die OSC-Pins können als I/O-Pins verwendet werden.
Wär ja cool.
Ich sag ja, bin kleiner Anfänger, aber mit Eurer Hilfe werd ich das noch ändern.
www.sprut.de
Ist besset als alle mir bekannten Bücher in deutscher Sprache.
Tipp:
Fang am besten an Dich mit der Konfiguration (Anfangseinstellung) des PIC anzufreunden.
Da wären: PWRTE, WDT, OSC, CODEPROTECT
Dann solltest Du versuchen eine LED einzuschalten, blinken zu lassen, ein Lauflicht programmieren.
Unter Lernbeispiele bei sprut findest Du einen leichten einstieg.
Natürlich wäre ein Klick auf Grundlagen ebenso ratsam.
MfG Karl-Heinz
HobbyElektronik hier klicken ....
Jetzt seh ich mir einen Programmcode nach dem anderen an und bin immer noch kein Stück weiter.....
Entweder denke ich zu "logisch" oder ich bin einfach nur zu blöd dazu.
Ich habe beruflich SPS programmiert, hab schon ein bisschen was mit C-Control gemacht und versuche in den Programmen immer noch sowas wie logik zu sehen...
Load I 0.1 (Lade Eingang 0.1)
If....then
goto
xor.....
Alles Dinge, die ich "übersetzen" kann und darin Sinn sehe...
Bei Assembler find ich nicht mal ansatzweise sowas...
Ich sehe bei Sprut zum Beispiel gar nix von Include...
irgendwo hab ich dann noch "include irgendwas.H" gesehen, woanders sehe ich "include irgendwas.INC"
Ich blicks nicht mehr...
Und ich hab immer noch nix gefunden, wie ich beim 16F628A den internen Oszillator aktiviere, bzw nutze...
Muss ich dann da schreiben
???Code:list P=16f628a, E=1, R=DEC ; Prozessortyp, Errorlevel und Zahlenformat include "P16F628A.INC" ; Registerdefinitionen einbinden errorlevel 1 ; Meldungen ignorieren __CONFIG INTRC_OSC
Moin moin.
Hier mal ein Beispiel für deinen PIC:
__config b'10000100011000'
So müsste er den Internen Oszillator benutzen.
(bit 0 ist das erste von rechts)
In diesem Register kannst Du zwischen zwei Frequenzen des internen Oszillators wählen.
bit 13 bit 0
bit 13: CP: Flash Program Memory Code Protection bit(2)
(PIC16F648A)
1 = Code protection off
0 = 0000h to 0FFFh code-protected
(PIC16F628A)
1 = Code protection off
0 = 0000h to 07FFh code-protected
(PIC16F627A)
1 = Code protection off
0 = 0000h to 03FFh code-protected
bit 12-9: Unimplemented: Read as ‘0’
bit 8: CPD: Data Code Protection bit(3)
1 = Data memory code protection off
0 = Data memory code-protected
bit 7: LVP: Low-Voltage Programming Enable bit
1 = RB4/PGM pin has PGM function, low-voltage programming enabled
0 = RB4/PGM is digital I/O, HV on MCLR must be used for programming
bit 6: BOREN: Brown-out Reset Enable bit (1)
1 = BOR Reset enabled
0 = BOR Reset disabled
bit 5: MCLRE: RA5/MCLR/VPP Pin Function Select bit
1 = RA5/MCLR/VPP pin function is MCLR
0 = RA5/MCLR/VPP pin function is digital Input, MCLR internally tied to VDD
bit 3: PWRTE: Power-up Timer Enable bit (1)
1 = PWRT disabled
0 = PWRT enabled
bit 2: WDTE: Watchdog Timer Enable bit
1 = WDT enabled
0 = WDT disabled
bit 4, 1-0: FOSC<2:0>: Oscillator Selection bits(4)
111 = RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN
110 = RC oscillator: I/O function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN
101 = INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
100 = INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
011 = EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN
010 = HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
001 = XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
000 = LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
PCON – POWER CONTROL REGISTER (ADDRESS: 8Eh)
bit 3 OSCF: INTOSC Oscillator Frequency bit
1 = 4 MHz typical
0 = 48 kHz typical
Sooo....
Hab eben mal mit CH-Basic etwas rumgespielt...
Ich hoffe, falls fehler auftauchen, werden mir die ASM-Spezies die Richtung weisen, und insgesamt wirds den ASM-Neulingen etwas helfen das alles zu verstehen.
CH-Basic-Code:
Zu Deutsch:Code:PIC 16F628 StartAddress 0x5 BYTE vartest1 WORD SBYTE SWORD PortRd A , VARTEST1 SetPort B , VARTEST1
Lade den kompletten Port A in die Variable VARTEST1
Schiebe die komplette Variable VARTEST1 in Port B
Also alles was an Port A reinkommt, gebe ich 1 zu 1 an Port B weiter....
Als ASM-Code macht mir das Prog das hier:
Ich versuche jetzt mal geschriebenerweise, mir das ganze irgendwie zu "übersetzen"...Code:LIST P= 16F628 INCLUDE "P16F628.INC" RADIX DEC ORG 0X5 AUX1_L EQU 0X20 AUX1_H EQU 0X21 AUX2_L EQU 0X22 AUX2_H EQU 0X23 AUX EQU 0X24 S0 EQU 0X25 VARTEST1 EQU 0X26 MOVF PORTA, W MOVWF VARTEST1 MOVF VARTEST1, W MOVWF TRISB END
LIST P= 16F628
INCLUDE "P16F628.INC
Hier sag ich dem Programm, welchen Controller ich überhaupt verwende....
MOVF PORTA, W
Packe (mov = move ?) den Port A in den Arbeitsspeicher (W ?)
MOVWF VARTEST1
Packe den Arbeitsspeicher W in die Variable VARTEST1
MOVF VARTEST1, W
Packe die Variable VARTEST1 in den Arbeitsspeicher W
MOVWF TRISB
Packe den Arbeitsspeicher W in den Port B
---------
Warum das aber erst PORTA und hinterher TRISB heisst, bin ich überfragt....
W steht für working Register, also Arbeitsregister. Bei den PIC's laufen alle
Aktionen über dieses Register, ist manchmal etwas lästig aber man gewöhnt sich daran. Also dein punkt 1 stimmt so. Bei 2 heist dann bewege den Inhalt von PORT A in das W-Register.
3. Move W-Register in die Variable VARTEST (F steht für File-Register)
4. Das Ganze wieder zurück
5. Schreibe den inhalt von W in das Datenrichtungsregister TRIS B
Damit wird dein Programm schonmal nicht das machen was du woltest sondern PORT A einlesen und je nach eingelesenen Wert Teile von PORT B als Ausgang konfigurieren. Ich vermute mal das du nicht SetPort B sondern Port Write nehmen mußt (ich kenne den syntax deines Basics nicht)
Schau dir doch mal die seite von Sprut http://www.sprut.de/ an da kann man viele Grundlagen zum PIC nachlesen und wenn du die Beispiele dort Verstanden hat hast du ein gutes Grundgerüst zum Programieren mit den PIC's
.
MFG
ralf
Lesezeichen