Nachdem mir zum Thema Start mit Mikrocontrollern hier schon einmal sehr
hilfreich weitergeholfen wurde, hab ich nun mehr oder weniger
erfolgreich einen PIC 16F627A zum laufen gebracht. Es soll einfach eine
LED, die mit einem Vorwiederstand an RA0 angeschlossen ist, blinken. Tut
sie auch, nur irgentwann hört sie einfach auf zu blinken und geht aus,
bis sie dann irgentwann weiterblinkt. Ich hab mir schon gedacht dass
vielleicht mein Steckbrett nen Wackelkontakt oder sowas hat also hab ich
ein neues genommen, nur das Problem besteht weiterhin.
Die Schaltung besteht aus dem PIC, einem 4 MHz Quarz das an OSC1 und
OSC2 angeschlossen ist, jeweils ein 18p kondensator von jedem Pin des
Quarzes zur Masse und eben die LED mit Wiederstand an RA0. Der Code ist
mit MPLABX IDE v2.00 geschrieben, ich verwende den XC9 Compiler und das
Pickit 3, welches die Schaltung auch mit 5v versorgt.
1
#include<stdio.h>
2
#include<stdlib.h>
3
#include<xc.h>
4
5
6
#pragma config FOSC = XT // Oscillator Selection bits (XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN)
7
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
8
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
9
10
#define _XTAL_FREQ 4000000
11
12
intmain(intargc,char**argv){
13
14
TRISA=0x00;
15
16
while(1){
17
18
PORTAbits.RA0=1;
19
_delay(100000);
20
PORTAbits.RA0=0;
21
_delay(100000);
22
23
return(EXIT_SUCCESS);
24
}
25
}
das ist der c Code, ich hoffe ich hab keine wichtige Information
vergessen.
Ich hätte auch noch ein paar Fragen bezüglich des Codes, und zwar ob ich
das _XTAL_FREQ überhaupt brauche wenn ich einen externen Takt verwende
(die LED blinkt auch ohne xtal) und warum die __delay_ms(x); Funktion
nicht geht, funktioniert die bei PIC 16 überhaupt nicht oder hab ich was
falsch gemacht?
danke schonmal
Joh
Die Templates sind eigentlich nicht für deinen Compiler geeignet !
#include <stdio.h> löschen
#include <stdlib.h> löschen
(nur xc.h)
int main(int argc, char** argv) -> void main(void)
und wie Kai schon erwähnt hat, KEIN return in main !
(auch nicht außerhalb der while(1) Schleife)
Wegen der delay... Funktionen: Was sagt denn der User Guide ?
ok ich mal rausgemacht was nicht reingehört (war in dem Tutorial was ich
gesehen habe halt drin, und der hat auch den XC8 verwendet)
Volker SchK schrieb:> Was sagt denn der User Guide ?
der user guide vom PIC oder vom XC8? ich weiß nicht so recht wo ich da
suchen soll...
und wenn ich den Pic ohne pickit betreiben will, muss ich doch einfach
nur VDD und VSS an 5v anschließen oder?
Joh R. schrieb:> der user guide vom PIC oder vom XC8? ich weiß nicht so recht wo ich da> suchen soll...
Also der User Guide vom PIC heißt Data Sheet und da sind keine
Beschreibungen von Funktionen irgendwelcher Compiler drin!
Wenn du den PIC im Debug Modus programmiert hast, dann läuft der nicht
ohne das PicKit.
Joh R. schrieb:> Die Schaltung besteht aus dem PIC, einem 4 MHz Quarz das an OSC1 und> OSC2 angeschlossen ist, jeweils ein 18p kondensator von jedem Pin des> Quarzes zur Masse und eben die LED mit Wiederstand an RA0.
Da fehlt noch ein 100nF Blockkondensator am VDD Pin nach Ground!
Was hast du mit dem MCLR Pin gemacht, hängt der ohne Pickit in der
Luft ?
Joh R. schrieb:> der user guide vom PIC oder vom XC8? ich weiß nicht so recht wo ich da> suchen soll...
Vom XC8, der PIC an sich kennt keine C, nur ASM oder um genau zu sein
Maschinensprache. Der XC8 übersetzt den C-Code (inkl. delay) dann in
Maschinensprache.
> und wenn ich den Pic ohne pickit betreiben will, muss ich doch einfach> nur VDD und VSS an 5v anschließen oder?
Vss kommt an 0V, am /MCLR Pin sollte noch ein Pullup sein.
Joh R. schrieb:> Die Schaltung besteht aus ...
Ein kompletter Schaltplan nicht in Prosa wäre besser.
> und zwar ob ich> das _XTAL_FREQ überhaupt brauche wenn ich einen externen Takt verwende
Ja, damit sagst du dem Compiler für welche Oszillatorfrequenz er die
Delay-Schleifen berechnen soll.
also es funktioniert jetzt soweit alles danke :) nur irgentwie nicht
ohne das Pickit, also wenn ich die Schaltung an 5v anschließe, leuchtet
die LED nur.
Volker SchK schrieb:> Was hast du mit dem MCLR Pin gemacht, hängt der ohne Pickit in der> Luft ?
der ist mit einem 10k Widerstand mit +5v verbunden (10k hab ich mal bei
einer Beispielschaltung gesehen) stimmt der Wert für den Pic überhaupt?
Wie find ich denn raus was für einen Widerstand ich brauch, im
Datenblatt hab ich nichts dazu gefunden (oder war ich nur zu doof zum
suchen?) und liegt es an dem MCLR dass die LED nur leuchtet?
Joh R. schrieb:> stimmt der Wert für den Pic überhaupt?
Ja
> Wie find ich denn raus was für einen Widerstand ich brauch
Nicht so wichtig, ist nur ein Pullup, ich nehme immer irgendwas zischen
10k und 100k, je nachdem was da ist.
Post mal einen richtigen Schaltplan, der deinem Aufbau entspricht.
Joh R. schrieb:> also es funktioniert jetzt soweit alles danke :) nur irgentwie nicht> ohne das Pickit, also wenn ich die Schaltung an 5v anschließe, leuchtet> die LED nur.
NOCHMALK die Frage: "Hast du den PICim Debug Mode programmiert ?"
(oder Release, Button mit einen grünen Pfeil der nach unten zeigt)
Volker SchK schrieb:> NOCHMALK die Frage: "Hast du den PIC im Debug Mode programmiert ?">> (oder Release, Button mit einen grünen Pfeil der nach unten zeigt)
oh sorry die Frage hab ich wohl übersehen, ich programmier den wohl im
Release, also der Knopf mit dem grünen Pfeil der nach unten auf so nen
chip zeigt
Joh R. schrieb:> der ist mit einem 10k Widerstand mit +5v verbunden (10k hab ich mal bei> einer Beispielschaltung gesehen) stimmt der Wert für den Pic überhaupt?> Wie find ich denn raus was für einen Widerstand ich brauch, im> Datenblatt hab ich nichts dazu gefunden
Hat ja auch mit Prozessor nichts wirklich zu tun, sondern mit dem
PICKIT.
Es gibt da ein Poster (auch als PDF), zu groß um es hier hochzuladen,
abert ein Ausschnitt
MfG Klaus
Klaus schrieb:> Hat ja auch mit Prozessor nichts wirklich zu tun, sondern mit dem> PICKIT.
Wenn der Reset floatet und den Chip dadurch immer wieder resetet, hat
das mit dem Chip sehr wohl was zu tun...
Max H. schrieb:> Post mal einen richtigen Schaltplan, der deinem Aufbau entspricht.
müsste so aussehen. Wenn ich alles am Pickit hängen hab blinkt die LED
so wie sie soll, wenn ich die Schaltung ans Netzteil hänge, leuchtet sie
nur noch, hab ich irgent ein Bauteil vergessen oder liegt der Fehler im
Code?
Joh R. schrieb:> Wenn ich alles am Pickit hängen hab blinkt die LED> so wie sie soll, wenn ich die Schaltung ans Netzteil hänge, leuchtet sie> nur noch, hab ich irgent ein Bauteil vergessen oder liegt der Fehler im> Code?
Stell mal von Debug auf Release um in MPLAB.
Joh R. schrieb:> oh sorry die Frage hab ich wohl übersehen, ich programmier den wohl im> Release, also der Knopf mit dem grünen Pfeil der nach unten auf so nen> chip zeigt
Das mit dem 100nF hast du dann wohl auch übersehen.
(Stand genau daneben ;-)
Ok, wenigstens bist du im Release mode.
Was tust du genau ?
Ich würde vorschlagen, du deaktivierst die Versorgung über das PICKIT
und programmierst von Anfang an mit externer Versorgung.
Wenn das läuft, ziehst du das PICKIT ab und schaust, ob es weiter
blinkt.
Wenn auch das funktioniert, dann schaltest du die Versorgung ab und
wieder an und schaust, ob es wieder anfängt zu blinken.
Noch was - Spezifiziere IMMER ALLE Config Bits !
(Ist ja mit dem integrierten Tool wohl kein Akt)
Das Register COMCON wird bei einem Reset auf b0000 0000 gesetzt,was
moeglicherweise das Problem ist.
Ich wuerde folgende Portinitialisierung vornehmen:
TRISA = 0x00;
COMCON = 0x03; => dadurch werden die Komparatoren deaktiviert.
Sowie Komparatoren aktiv sind ,sind die PortA-Pins teils auch in
Analogmode(zumdindest sieht es so nach dem Datenblatt aus....)
Toxic schrieb:> Sowie Komparatoren aktiv sind ,sind die PortA-Pins teils auch in> Analogmode(zumdindest sieht es so nach dem Datenblatt aus....)
Das "sollte" bei Nutzung als Ausgang keine Rolle spielen, aber schaden
kann es auf keinen Fall, die Komparatoren ab zu schalten.
Volker SchK schrieb:> aber schaden> kann es auf keinen Fall
So sehe ich das auch ;-)
Ich hab die Komparatoren in meinen Projekten noch nie benoetigt,habe
aber grundseatzlich die COMCON -Initialisierung vorgenommen (auch um
Energie zu "sparen".
Sowie Komparatoren aktiv sind duerfen Analogsignale angelegt werden.Es
sieht so aus als wenn COMCON-Anweisung den TRIASA-Befehl uebergeordnet
sind - siehe Bild.
Toxic schrieb:> Es sieht so aus als wenn COMCON-Anweisung> den TRIASA-Befehl uebergeordnet sind - siehe Bild.
Ich sehe nichts, meinst du das Bild ;-)
Nur über dem Bild steht:
>Figure 10-1 shows the eight possible modes.>The TRISA register controls the data direction>of the comparator pins for each mode.
Trotzdem, für alle Fälle COMCON (oder COMCONbits.CM) = 0x07;
Was machst du mit dem LVP config bit ?
Jaa es funktioniert endlich, danke für eure Hilfe :)
Volker SchK schrieb:> Spezifiziere IMMER ALLE Config Bits !
daran lags wohl auch, dass die Schaltung nur mit dem Pickit funktioniert
hat, LVP stand bei mir auf ON was die Ursache dafür war.
Toxic schrieb:> COMCON = 0x03; => dadurch werden die Komparatoren deaktiviert.
es hat jetzt zwar auch ohne funktioniert, aber wenn ihr meint es wär
besser würd ich es gerne mit reinnehmen, nur kommt immer wenn ich COMCON
= 0x07; schreib, wird die Zeile als Fehler markiert und als Info darüber
steht dran unable to resolve identifier COMCON, kennt der PIC 16 die
Funktion nicht oder woran könnte das liegen?
Joh R. schrieb:> nur kommt immer wenn ich COMCON> = 0x07; schreib, wird die Zeile als Fehler markiert und als Info darüber> steht dran unable to resolve identifier COMCON, kennt der PIC 16 die> Funktion nicht oder woran könnte das liegen?
Weil beim 16F627A das Register nicht COMCON (wie bei vielen neueren PIC)
sondern CMCON heisst.
BTW: wenn du dir schon mal da Datenblatt angesehen hättest, wäre das
wohl aufgefallen ;-)
Chris B. schrieb:> BTW: wenn du dir schon mal da Datenblatt angesehen hättest, wäre das> wohl aufgefallen ;-)
ja.. reingeschaut hab ich schon, da ich aber gerade erst mit den PICs
angefangen hab, weiß ich noch nicht immer wo ich da überall in den 178
Seiten suchen muss
Joh R. schrieb:> weiß ich noch nicht immer wo ich da überall in den 178> Seiten suchen muss
Wenn man sucht wie man den Komparator deaktiviert, sucht man im Kapitel
"10.0 COMPARATOR MODULE"
So schwer ist das doch nicht.
Wenn es darum geht einen Pin anzusteuern, dann schaut man eben in das
entsprechende Kapitel.
5 1 PORTA and TRISA Registers
Wenn da der Komparator erwähnt wird, dann schaut man eben im
entsprechenden Kapitel weiter.
10 0 COMPARATOR MODULE14 1 Configuration Bits muss auch sein ;-)
<edit> zu langsam ;-)