Hallo zusammen,
bin ganz neu hier und habe mich mal im Forum ein bisschen
umgesehen.....Respekt, wie es aussieht bekommt man hier von geduldigen
Usern schnelle und kompetente Auskunft.
Ich habe vor mich in die PIC Welt einzuarbeiten, da ich es statt habe
mit 40XX, 74xx und Co zu leben :-)
Alles weitere bezieht sich auf folgende Fakten:
*PIC 16F627
*Programmier- und Experimentierboard von Conrad (schäm) Art-Nr.: 191020
- 62
*MPLAB IDE v8.00
*Compiler CC5X.EXE
*Loader (Brennsoftware) zum HEX File schreiben nennt sich "Progpic2.exe"
Ziel soll sein mit MPLAB in C ein Programm zu schreiben.
Erste Gehversuche mit Assembler waren zwar erfolgreich, jedoch ist mir
die ganze Sache etwas zu abstrakt, und da ich C ein bisschen behersche
möchte ich das Rad nicht neu erfinden.
Das HEX File hat auch soweit funktioniert:
(okay war abgeschrieben und ein bisschen modifiziert, aber läuft)
loops Equ 0x22 ; Zähler für Warteschleife
loops2 Equ 0x23 ; Zähler für Warteschleife
Init
bsf STATUS, RP0 ; auf Bank 1 umschalten
movlw B'00000000' ; PortB alle output
movwf TRISB
bsf STATUS, RP0 ; auf Bank 1 umschalten
movlw B'11111111' ; PortA alle input
movwf TRISA
bcf STATUS, RP0 ; auf Bank 0 zurückschalten
clrf PORTB ; alle LEDs ausschalten
btfss PORTA,0
goto Ende
Loop20
bsf PORTB,0 ; LED an RB0 einschalten
call Wait
bsf PORTB,1
call Wait
bsf PORTB,2
call Wait
bcf PORTB,0
call Wait
bcf PORTB,1
call Wait
bcf PORTB,2
call Wait
goto Loop20
Ende
;**********************************************************
; Warteschleife 250 ms
Wait
movlw D'250' ; 250 ms Pause
movwf loops
Wai
movlw .110 ; Zeitkonstante für 1ms
movwf loops2
Wai2 nop ;
nop
nop
nop
nop
nop
decfsz loops2, F ; 1 ms vorbei?
goto Wai2 ; nein, noch nicht
;
decfsz loops, F ; 250 ms vorbei?
goto Wai ; nein, noch nicht
retlw 0 ; das Warten hat ein Ende
end
So nun möchte ich das ganze in C machen. im I-Net gibt es unzählige
Anleitungen welche mehr oder weniger gutr sind.
Ich habe mit dem Projektwizard ein neues Projekt erstellt.
1.) Den PIC angegeben
2.) Toolsuite "Data CXX5"
3.) Toolsuite Contents:
C:\CC5X\CC5X.EXE
C:\Programme\Microchip\MPASM Suite\MPASMWIN.exe
C:\Programme\Microchip\MPASM Suite\mplink.exe
4.) Name usw. vergeben
5.) KEINE Daten eingebunden weder Linker noch sonst was aus MPLAB
Unter source Files haben ich folgendes erstellt und in das Projekt
eingebunden:
void main (void)
{
TRISB = 0b.0000.0000;
PORTB = 0b.0101.0101;
}
Nach dem Builden kommt dann folgendes raus:
processor 16F627
radix DEC
PORTB EQU 0x06
TRISB EQU 0x86
RP0 EQU 5
RP1 EQU 6
GOTO main
; FILE neu5.c
;void main (void)
;{
main
; TRISB = 0b.0000.0000;
BSF 0x03,RP0
BCF 0x03,RP1
CLRF TRISB
; PORTB = 0b.0101.0101;
MOVLW .85
BCF 0x03,RP0
MOVWF PORTB
SLEEP
GOTO main
END
Soweit so gut. Wenn ich nun die ganze Sache brennen will mit meinem
Programm Progpic2.exe, dann kommt folgende Fehlermeldung
"No Config-Word in File or Files does not match to the controler type"
Ich weiß jetzt nicht ob dass eine spezielle, programmspezifische
Fehlermeldung ist, oder ob in der ASM was fehlt, und es darum nicht
klappt.
Kann mir einer sagen woran es liegt, oder gibt es einen einfacheren Weg.
Mir würde ein lauffähiges Grundgerüst genügen in welches ich dann meinen
C-Code einfügen kann......
Schöne Grüße
Mino
Moin,
du hast wahrscheinlich vergessen die Config Bits zu setzen.
Entweder kannst du sie im Quellcode direkt setzen (Kenne den CC5 jetzt
nicht) oder in MPLAB unter Configure -> Configuration Bits.
Ist bestimmt der Haken gesetzt "set in code". Einfach wegmachen,
einstellen und neu compilieren.
Hallo Paule,
danke für die schnelle Antwort. Werd´s morgen probieren. Meine Nerven
schaffen das heute abend nicht mehr :-)
Wenn´s so einfach ist, dann soll´s recht sein.
Schönen Abend
Mino
ich heisse dich herzlich in der kleinen pic-gemeinde willkommen
meines erachtens gibt es wenig genug die wetwas mit pics machen
für den einstieg hast du eine gute wahl getroffen da meines wissens der
627 einen internen oszillator hat d.h. du kannst ihn auf ain normales
steckbrett stecken und eine belibige schaltung aufbauen (feine sache ich
mach das auch immer so).
du solltest dir umbeding mal die seite vom sprut anschauen www.sprut.de
dort werden auch picbrenner vorgestellt brenner 5 als
parallelportbrenner und der kaum zu übertreffende Brenner 8 mit usb
schnittstelle und unterstützung für fast alle 5V pic typen
am besten du besorgst dir nen paar leds, taster und nen 2*16 character
display
und fängst an zu experimentieren
interessant ist auch der max 7219 (gibts bei maxim als sample) mit dem
kannst du via spi 7 segmentanzeigen ansteuern und wenn de dir dann noch
ne 32,768kHz quarz besorgst ist es zu deiner 1. selbstprogrammirten uhr
nichtmehr weit
ganz wichtig schau nochmal ins datenblatt kapitel io-pins weil bei
manchen pictypen muss man noch die analogeingänge ausschalten bevor man
die pins als normale (digitale) io-pins nutzen kann (erspahrt viel frust
wenn mans weiss)
mfg
thomas
Hallo Thomas,
danke für die Unterstützung. Die Seite von sprut.de ist quasi meine
Bibel die letzten paar Tage gewesen. Jedoch wird dort größtenteils auf
Assembler und nicht auf C eingegangen.
Mit meinem Board bin ich auch sehr zufrieden. Es ist ausgestattet mit
einem Schalter der zwischen Programmmodus und Betriebsmodus umschaltet.
Angeschlossen an RS232. Wie gesagt, dass Ding funktioniert auch,
Assemblerprogramme kann ich erstellen und brennen. Integriert ist auch
ein 4MHz Quarz sowie 6 LED und 4 Taster je Port - was braucht man mehr
zu rumspielen :-)
Mein Problem ist eben dass das HEX File nicht von der "Brennsoftware"
akzeptiert wird
"No Config-Word in File or Files does not match to the controler type"
Könnte sich jemand bitte mal dass entsprechende ASM File oben anschauen,
und sagen ob was fehlt oder falsch ist ?
Den Tip mit dem Config-Word im MPLAB werde ich auf jeden Fall heute
testen.
Wie gesagt, wäre ich auch über eine Beispielgrundprogramm (also ohne I/O
Funktion) welches den 16F627 unterstützt sehr dankbar......
Schöne Grüße
Mino
Hallo zusammen,
habe versucht nochmal mit MPLAB auch das Konfigurationswort zu
definieren - bringt nix.
Vielleicht sollte ich mal einen Schritt zurückgehen....
Also mein Compiler CC5X tut soweit. Jedenfalls ließ sich das Programm
#include <C:\cc5\16F84.h>
void main(void)
{
TRISB = 0b.0000.0000;
PORTB = 0b.1010.1010;
}
übersetzen und brennen (Erstes Erfolgserlebnis) :-)
Jede 2. LED war an.
Nun mal eine ganz grundlegende Frage:
Welche Dateien muss ich in den Quellcode einbinden und wenn ja, für was
sind sie gut ?
1.) #include <C:\cc5\16F84.h>
2.) #include <C:\Programme\Microchip\MPASM Suite\LKR\16f627.lkr>
3.) #include <C:\Programme\Microchip\MPASM
Suite\Template\Code\16F627TEMP.ASM>
4.) #include <C:\Programme\Microchip\MPASM
Suite\Template\Object\16F627TMPO.ASM>
zu 1.) ist anscheinend notwendig, da dort der PIC definiert wird
zu 2.) ist laut I-Net auch notwendig, da hiermit der Brenner weiß in
welchen Bereich das File geschrieben werden soll
zu 3.)+4.) Diese Dateien werden bei manchen Tutorials mit in den
Quellcode bei MPLAB aufgenommen, ich weiß aber nicht warum...
Grüße
Mino
Nachtrag
Ist es richtig, dass ich die Linker-Datei nicht brauche, da ich bei
meiner Brennsoftware angeben muss welchen PICin brennen möchte, und die
Software dadurch weiß wohin das HEX File geschrieben werden muss ???
Die Linkerdatei brauchst Du, weil der compilierte Code mit dem
Startup-Code gelinkt werden muss.
Aber möglicherweise kannst Du auf die Includes 3. und 4. verzichten, das
tönt so nach TEMPlate.
Schau mal im Manual des Compilers nach, wie Du die Fuses (Config Bits)
setzen kannst. #pragma config...
Schau auch mal bei www.cc5x.de rein.
> ich heisse dich herzlich in der kleinen pic-gemeinde willkommen> meines erachtens gibt es wenig genug die wetwas mit pics machen
Nun ja, so richtig klein ist die Gemeinde eigentlich nicht, da die PICs
in ihrer Klasse bei den Verkaufszahlen seit Jahren weltweit die Nummer 1
belegen. Obwohl gelegentlich abgestritten, scheint wohl doch Einiges für
diese Controller zu sprechen.
Aber gut, vielleicht solltest Du auch nicht vergessen, mal bei Microchip
selber vorbei zu schauen. Unter www.microchip.com findest Du alle
möglichen Hilfen zu nahezu jeder Frage. Es ist zwar alles in Englisch,
aber mit mittelmäßigen Englischkenntnissen trotzdem gut zu lesen.
MfG
Gast
>da die PICs in ihrer Klasse bei den Verkaufszahlen seit Jahren weltweit die >Nummer 1 belegen.
Soll jetzt kein Bashing werden !
Wo kann mann sowas nachlesen ?
Mich interessieren die Marktanteile der einzelnen Hersteller bei µC.
Hallo,
ich benutze ebenfalls MPLAB IDE v8.00 und CC5X.EXE und programmiere in
C.
Meine "Standard"-Vorlage sieht so aus, wenn ich beginne.
Der Rest wird anhand der gewünschten Funktion und des PIC-Datenblatts
eingefügt.
Ich denke, bei Dir fehlt das config-word (s. zweite Zeile)
Michi Müller wrote:
> Also ich habe mal gelesen, das die AVRs den größeren Marktanteil> mittlerweile haben.
Es ging ja darum, wie verbreitet PICs [z.B. hier im Forum] sind.
Wenn wenige kommerzielle Anwender riesige Mengen eines Controllers
einsetzen, werden zwar stückzahlmässig grosse Umsätze damit erzielt, was
aber nicht bedeutet, dass der Controller weit verbreitet ist.
Ausserdem tut das jetzt wirklich nichts zur Sache und lenkt von Minos
Problem ab.
Hallo Netfriend,
vielen Dank, genau sowas habe ich gesucht ! Super !
Also werde den Code mal kopieren und versuchen ein kleines Programm zu
integrieren. Melde mich dann mit evtl. Erfolgserlebnissen.
Besten Dank für die Hilfe
PS: Jungs, es ist doch vollkommen egal wer den größeren Marktanteil hat,
Hauptsache das Ding tut :-)
....hm, einnmal hat´s funktioniert, jedoch bekomme ich jetzt die
Fehlermeldung
Error[1] C:\PIC\Programme\Versuch9\neu9.c 1 : Unable to open file
'16F627.h'
(The file name or path can be wrong (Also consider option -cif))
In meinem Program steht oben
#pragma chip PIC16F627
#pragma config = bin(11.1111.0111.0001)
Ich habe beim ersten Versuch bemerkt dass ich die Zeile
#include "int16C627.h"
ausblenden muss (//), sonst merkert er wg. einer Doppelkonfiguration
Im Projekt von MPLAP habe ich mal bei "Header Files"
1.) keins
2.) das von CC5X
3.) das von MPLAP Suite
eingebunden....immer das gleiche.
Nun verlangt er sie, findet sie aber anscheinend nicht, obwohl z.T.
eingebunden (s. oben)
Was tun ?
Mino
PS: Die Ports habe ich entsprechend umkonfiguriert, das passt soweit
>Ich habe beim ersten Versuch bemerkt dass ich die Zeile>#include "int16C627.h">ausblenden muss (//), sonst merkert er wg. einer Doppelkonfiguration
Das ist richtig, da die Zeilen (meines Wissens) das gleiche aussagen.
Wenn du
>#pragma chip PIC16F627
verwendest, brauchst du
#include "16F627.H"
nicht mehr.
---------------
>Nun verlangt er sie, findet sie aber anscheinend nicht, obwohl z.T.>eingebunden (s. oben)
Ich glaube das Problem hatte ich auch mal. Hast du mal versucht die
entsprechende Datei (bei dir anscheinend 16F627.H) aus dem CC5X Ordner
in den gleichen Ordner zu kopieren in dem auch deine "neu9.c" Datei ist?
Schöne Grüße,
Alex
Hallo,
hm, es ist zum Mäusemelken....heute exakt dasselbe Projekt nochmal
geöffnet, uns siehe da.....funktioniert.
Muss mal bei meinem Rechner ein bisschen auf dem Grund gehen. Es kann ja
nicht sein dass die Software mal funktioniert und mal nicht.
Sollte der Fehler wieder mal auftauchen (wovon ich mittlerweile nahezu
überzeugt bin) dann werde ich mal wie beschrieben, die Header Datei in
den Projektordner direkt kopieren und dann von da aus einbinden.
Mino