Forum: Mikrocontroller und Digitale Elektronik Grundlagen zum PIC


von Mino (Gast)


Lesenswert?

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

von Paule (Gast)


Lesenswert?

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.

von Mino (Gast)


Lesenswert?

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

von Thomas M. (thomas1123) Benutzerseite


Lesenswert?

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

von Mino (Gast)


Lesenswert?

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

von labelohase (Gast)


Lesenswert?

fielleicht hilft dir diese Seite

siehe http://www.fernando-heitor.de/it

von Mino (Gast)


Lesenswert?

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

von Mino (Gast)


Lesenswert?

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 ???

von Severino R. (severino)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

> 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

von Hans Dötter (Gast)


Lesenswert?

>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.

von Gast (Gast)


Lesenswert?

Such mal unter www.google.de

von netfriend (Gast)


Lesenswert?

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)

1
#pragma chip PIC16F876
2
#pragma config = bin(11.1111.0111.0001)     
3
#include "int16CXX.h"
4
5
6
void initPIC()
7
{
8
  OPTION_REG = bin(00000010);
9
  INTCON = bin(11000000);  
10
  
11
  //Definiton der Ein-/Ausgänge
12
  //Port A
13
  PORTA=0x00;            // Alles Ausgänge
14
  TRISA=0b00000000;  
15
  ADCON1=0x06;
16
  
17
  //Port B
18
  TRISB=0b11111110;     // Alles Eingänge
19
  PORTB.0=0;
20
  
21
  //Port C
22
  PORTC=0x00;
23
  TRISC=0b00000110;     // RC1,2 Eingänge, Rest Ausgänge
24
}
25
26
void main()
27
{
28
  initPIC();            //System initialisieren
29
   
30
  // Hier eigenen Code einfügen...
31
32
}

Vielleicht hilft's Dir weiter....

Gruß, netfriend

von Hans Dötter (Gast)


Lesenswert?

>Such mal unter www.google.de

Schon längst gemacht aber nix gefunden

von Michi Müller (Gast)


Lesenswert?

Also ich habe mal gelesen, das die AVRs den größeren Marktanteil 
mittlerweile haben.

von Severino R. (severino)


Lesenswert?

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.

von Mino (Gast)


Lesenswert?

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 :-)

von Mino (Gast)


Lesenswert?

Hallo Netfriend,

ich sag nur DANKE !!!

Endlich funktioniert´s. Bin echt happy :-)



Vielen Dank

Mino

von Mino (Gast)


Lesenswert?

....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

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Lesenswert?

>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

von Mino (Gast)


Lesenswert?

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

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.