Hallo,
versuche gerade mit einem Olimex Board
(https://www.olimex.com/Products/PIC/Proto/PIC-P14-20MHz/) ein Led
blinken lasen.
IDE und Compiler von Microchip installiert, Proger ist ein Pickit3
Problem:
schreibe folgende Code:
1
#include<stdio.h>
2
#include<stdlib.h>
3
#include<pic16F630.h>
4
5
6
//Just simple delay
7
voidDelay(unsignedlongcntr){
8
while(--cntr!=0);
9
}
10
11
// main function
12
13
intmain()
14
{
15
unsignedchari;
16
17
ANSEL=0b00000000;//All I/O pins are configured as digital
18
CMCON0=0b00000111;//Coperators turned OFF
19
PORTC=0x00;//write 0 to port C
20
TRISC=0x00;//set RC0 as output pin / set TRIS register BIT 0 to 0
Josep schrieb:> #include <pic16F630.h>
wenn es der XC-Compiler ist, bitte ändern in
#include <pic.h>
CMCON0 bitte auch in CMCON ändern
Bisher halt nicht definiert.
Schnell schrieb:
> wenn es der XC-Compiler ist, bitte ändern in> #include <pic.h>>> CMCON0 bitte auch in CMCON ändern
Ok beide Sachen geendert aber hängt jetzt noch an "ANSEL" Fehlermeldung
ist jetzt:
Martin schrieb:
> ja weil der PIC16F630 kein ANSEL Rergister (kein AD Funktion) hat (nur> der PIC16F676 wie im DS, P: 10 steht)
Hmm... ok wie definiere ich in disem Fall die I/O's? nur mit
TRISC = 0x00; ?
Da kein AD gibt sind alle IOs digital (vielleicht noch den Comparator
configurieren) und es sollte funktionieren.
P.S.: der PIC16F630 hat nur 1K, das wird schnell mit der C
Programmierung geschafft, also lieber mit Assembler anfangen.
Bei den 35 Befehlen ist es auch nicht kompliziert (Nur auf die
Bankumschaltung achten!)
Martin schrieb:
> Da kein AD gibt sind alle IOs digital (vielleicht noch den Comparator> configurieren) und es sollte funktionieren.
Ok Compilieren klappt jezt ABER blink kein LED ;-( warum jetzt?
Martin schrieb:
> P.S.: der PIC16F630 hat nur 1K, das wird schnell mit der C> Programmierung geschafft, also lieber mit Assembler anfangen.
Danke für den Hinweis, möchte eingentlich mit Assembler nichts haben.
Josep schrieb:> Hmm... ok wie definiere ich in disem Fall die I/O's? nur mit> TRISC = 0x00; ?
Damit definierst du alle IOs als output.
Für den PIC16 würde ich auch ASM empfehlen. Für C würde ich den PIC18
nehmen.
Josep schrieb:> Ok Compilieren klappt jezt ABER blink kein LED ;-( warum jetzt?
Configs Richtig eingestellt?
Was ist wenn du in der main die LEDs nur einschaltest?
Max H. schrieb:
> Damit definierst du alle IOs als output.
Jap, habe ich oben schnell korrigiert:
Josep schrieb:
> Sorry mit CMCON ?
Max H. schrieb:
> Für den PIC16 würde ich auch ASM empfehlen. Für C würde ich den PIC18> nehmen.
Ok aber für ein Led blinken lassen sollte reichen oder nicht?
Der PIC18 ist auch mit 14 Beinchen? sonst ist mein Board quasi um sonst
;-(
Josep schrieb:> Ok Compilieren klappt jezt ABER blink kein LED ;-( warum jetzt?
Das solltest du genaue spezifizieren: Was macht die LED, ist der Pin
Ausgang oder hochohmig.
Mit welcher Frequenz arbeitet der PIC?
Und nochmal: Sind die Configs richtig eingestellt?
Bin wieder da.
Also mit folgende einfache Code (denke ich), sollten alle PORTC-Pin's
als Ausgang definiert sein und dann alle Ausgänge ein sein oder nicht?
Laut Schaltplan ist der LED auf PINC2 sollte dann AN sein, ist aber AUS.
1
#include<stdio.h>
2
#include<stdlib.h>
3
#include<pic.h>
4
5
#define _XTAL_FREQ 20000000
6
7
8
#pragma config MCLRE = ON, CP = OFF, CPD = OFF, BOREN = OFF, WDTE = OFF
Ja, aber gemäss Schaltplan leuchtet die LED wenn die Outputs aus sind,
weil die LED sinking angeschlossen ist. Damit die LED leuchtet muss der
Strom in den Port fliessen, also der Output low sein.
Ro R. schrieb:
> Ja, aber gemäss Schaltplan leuchtet die LED wenn die Outputs aus sind,> weil die LED sinking angeschlossen ist. Damit die LED leuchtet muss der> Strom in den Port fliessen, also der Output low sein.
ja mit 0x0000000 sollte dann leuchten, leuchtet nicht.
Martin schrieb:
> - Ist der (LED) Jumper gesetzt?
ist gesetzt
> - Kannst du das Programm debuggen? oder ist es nur ein programmiergerät?
bin noch überfragt!
Max H. schrieb:
> Also den LED-Jumer setzen und PORTC=0x00; schreiben.
schon gemacht und nichts
NACHTRAG:
Der PIC ist doch in Ordnung! das Flash Program "MPLAB IPE" hat nen "hold
in reset" funktion und war gesetzt, ich vermute das hat den µC in reset
gehalten.
Mit dem Code hier sehe mein LED ganz schön blinken:
1
#include<pic.h>
2
3
// ext reset, no code protect, no brownout det ect, no watchdog,
4
// power - up timer enabled, int RC clock
5
#pragma config MCLRE = ON, CP = OFF, CPD = OFF, BOREN = OFF, WDTE = OFF
Max H. schrieb:
> Das erklärt auch warum niemand hier den Fehler gefunden hat.
Jap, Software ist ein wenig gewöhnungsbedürftig, es gibt ein extra
Software für's flashen (da ist diese "holt reset" funktion) aber das IDE
hat auch so eine Funktion.
Martin schrieb:> P.S.: der PIC16F630 hat nur 1K, das wird schnell mit der C> Programmierung geschafft, also lieber mit Assembler anfangen.> Bei den 35 Befehlen ist es auch nicht kompliziert (Nur auf die> Bankumschaltung achten!)
Ich programmiere mittlerweile nur noch in C. Und doch kriege ich es
immerwieder hin einen kleinen PIC nutzen zu können.
Man müsste sich mal die Mühe machen und ein Programm in C als auch in
ASM zu schreiben. Dann könnte man mal vergleichen ob der/die C-Compiler
wirklich so viel schlechter sind. Ich hab mir mal spaßeshalber ein paar
vom Compiler erstellte asm-Dateien angeguckt. Nicht viel anders als ich
es gemacht hätte. Im Gegenteil: Der Compiler hat schon n paar Kniffe
drauf, was ich umständlicher gemacht hätte. Naja. Ansichtssache. Ich
komme damit aus und sollte es doch mal eng werden, spare ich mir ein
bisschen Code oder nehme den nächst größeren PIC.