Letzte Hoffnung: PIC

OP (Firma: GreenWire-Elektronik) #1360289
Lesenswert?

Hallo Leute,

ich laborier schon seit langem an der Inbetriebnahme einer Schaltung mit 
einem PIC24HJ128GP206 rum. Den PIC konnte ich vor Einlöten nicht testen 
und dazu kommt das ich bisher Atmel programmiert hab (vom C166 mal 
abgesehen) und schon bisl eingerostet bin. Also ich hab nach 
hochtrabenden Zielen versucht einen einzigen Pin gezielt auf High zu 
setzen - ohne Erfolg. Könnte mir jemand mit einem Programm weiterhelfen 
das mir einfach nur einen Pin auf High zieht? Denn ich bin nicht mehr 
sicher ob der Fehler vor der Tastatur sitzt oder aber der Chip kaputt 
oder mein Layout falsch ist.
Gast #1360298
Lesenswert?

Der Umstieg von AVR auf PIC (und umgekehrt) kann schon
recht schmerzhaft sein. Bei den PIC24 weiß ich es grade
nicht, aber bei PIC16/18 müssen die Register für die
Datenrichtung genau umgekehrt initialisiert werden.
Das heißt eine 0 bedeutet Ausgang. Die nächste Schweinerei
könnten im Default aktive ADC- oder Komparatoreingänge sein.
Die muß man erst auf Digital IO umschalten.
OP (Firma: GreenWire-Elektronik) #1360317
Lesenswert?

Ich nutze das PICkit 2 - allerdings schließe ich den nur zum 
programmieren an - danach zieh ich den ab - Reset ist es nicht.
Ich hab schon X Konfigurationsmöglichkeiten ausprobiert, bin über diese 
miese prioritätsabhängige Mehrfachnutzung gestolpert und und und - aber 
ich habs nicht hinbekommen - daher hoffte ich hier auf ein Programm das 
funktioniert.
Gast #1360325
Lesenswert?

In welcher Sprache programmierst Du denn?

Bei C sind immer leichte, anschauliche und funktionierende 
Beispielprogramme dabei. Da hast Du wenig Arbeit. Die Programme sind 
entweder beim Compiler dabei oder bei Microchip zu holen.

Assembler würd ich mir nicht antun. Da mußt Du all das beachten, was die 
Vorredner schon erwähnt haben. Das ist überflüssig. Im Compiler ist das 
alles schon mal erfunden worden.
#1360333
Lesenswert?

ich hab mal nur schnell einen PIC24 ausgepackt und via SPI 6 7segmente 
angesteuert. schau mal rein, vielleicht findest du ein paar ideen, warum 
dein code nicht funktioniert (wäre sowieso angebracht den hier zu posten 
- raten macht nämlich nicht so spass)

ansosten:
www.engscope.com/pic24-tutorial
www.flyingpic24.com
www.sprut.de
Angehängte Dateien:
OP (Firma: GreenWire-Elektronik) #1360341
Lesenswert?

Also ich nutze mittlerweile C - ASM wird irgendwann einfach zuviel 
gefrickel ;)


mein Code sieht wie folgt aus:
1
#include "p24HJ128GP206.h"
2

3
_FOSCSEL( FNOSC_FRCPLL & IESO_OFF )
4
_FOSC ( FCKSM_CSDCMD & FCKSM_CSDCMD & POSCMD_NONE )
5

6
int main(void) {
7

8
   //ODCG |= 0xF3CF; // Only RG6..9 (CN8..11) pins have internal pull-up resistors which have to be enabled by setting the CNPU8..11 bits
9
//ODCG &= 0x0000;
10

11
TRISG = 0x0000;
12
Nop(); // Required if a port/latch is accessed in a next command
13
LATG = 0xFFFF;
14

15
while(1) {
16

17
}
18
   // return 0; // Don't do that in a non-OS MCU environment
19
}

Ich dachte eigentlich das ich nun an einem beliebigen Pin der Gruppe G - 
zum Beispiel Pin 1
OP (Firma: GreenWire-Elektronik) #1360360
Lesenswert?

A. K. schrieb:
> Such beim ADC mal nach AD1PCFG. Vielleicht fällt dann der Groschen.

ja - darauf bin ich auch schon reingefallen - allerdings beschreibt das 
Datenblatt Pin 1 (RG15) als normalen digitalen Pin - der hat keinerlei 
gemultiplexte Funktion - auch nicht Analogpin - von daher dachte ich ich 
bräuchte das nicht ... :-/
#1360375
Lesenswert?

Deine Ports/Pins hatte ich jetzt nicht eigens kontrolliert. Mag sein, 
dass Port G digital ist. Dann sollte das klappen.

Oder es gibt noch so eine Schönheit, diesen Typ habe ich nicht 
verwendet. Beim STM32 ist beispielsweise jedes Peripheriemodul von Haus 
aus erst einmal zentral abgeschaltet um Strom zu sparen.
#1360379
Lesenswert?

benützt du wirklich einen RC-oscillator? und bei _FOSC übergibst du von 
3 nötigen argumenten nur 2 (2 von deinen 3 sind ja gleich).

allgemein: entweder man definiert die register über das cklick-down im 
MPLAB oder man definiert sie im code (letzteres ist für eine 
portierbarkeit viel angenehmer). du definierst nur einen bruchteil im 
code: was ist mit den anderen?
#1360445
Lesenswert?

ich mache es auch lieber im code: aber wenn man's im code macht, dann 
vollständig (damit meine ich alle einstellungen definieren und nicht wie 
du nur den takt)

schau dir mal die "p24HJ128GP206.h" an, da siehst du, wie du was 
definieren kannst (auch deinen takt)


so, ich konnts nicht lassn, und hab ma schnell mei demoboard rauskramt 
und das hier funktioniert (halt mit nem leicht anderen PIC, dem ..306, 
und einem 10MHz-quarz). der pin RG6 sollt blinkn, waser bei mia auch tut 
:-)
1
#include "p24HJ128GP306.h"
2
#include <libpic30.h>
3

4
_FBS(RBS_NO_BOOT_RAM & BSS_NO_BOOT_CODE & BWRP_WRPROTECT_OFF);  // Boot Segment
5
_FSS(RSS_NO_SEC_RAM & SSS_NO_SEC_CODE & SWRP_WRPROTECT_OFF);  // Secure Segment
6
_FGS(GSS_OFF & GCP_OFF & GWRP_OFF);                // Code/Write Protect
7
_FOSCSEL(FNOSC_PRIPLL & IESO_OFF);                // Oscillator
8
_FOSC(FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMD_XT);          // Clock
9
_FWDT(FWDTEN_OFF & WINDIS_OFF);                  // Watchdog
10
_FPOR(FPWRT_PWR1);                        // Power-on Reset Value
11
//_FICD(BKBUG_OFF & COE_OFF & JTAGEN_OFF & ICS_PGD1);        // Register FICD (with debugger)
12
_FICD(BKBUG_OFF & COE_ON & JTAGEN_OFF & ICS_NONE);        // Register FICD (without debugger)
13

14

15
int main(void) {
16

17
  //ODCG |= 0xF3CF; // Only RG6..9 (CN8..11) pins have internal pull-up resistors which have to be enabled by setting the CNPU8..11 bits
18
  //ODCG &= 0x0000;
19
  
20
  TRISG = 0x0000;
21
  Nop(); // Required if a port/latch is accessed in a next command
22
  LATG = 0xFFFF;
23
  
24
  while(1) {
25
    LATGbits.LATG6 = 1;
26
    __delay32(10000000);
27
    LATGbits.LATG6 = 0;
28
    __delay32(10000000);
29
  }
30
}   // return 0; // Don't do that in a non-OS MCU environment

edit: wenn du im obigen bild das häckchen "Configuration Bits set in 
code" anklickst, werden die configs im code ignoriert und diese (im 
bild) genommen.
#1360885
Lesenswert?

hmm.. 1. wie misst du: multimeter/oszi? und 2. was misst du: 
belasteter/unbelasteter pin? (falls belastet: wie belastet?)

pullup? wie meinst du das resp. was hast du am pin wie ran gemacht?

du weisst aber schon, dass der pin nur max. 4mA treiben/ziehen kann?! 
also du nur eine lowcurrent-LED verweden kannst; oder dann einen treiber 
dazwischen schalten.

ps: nur den programmer abziehen genügt nicht, dass der PIC läuft; er 
muss auch auf nicht-debuggen programmiert sein (wähle im MPLAB dazu 
"release mode")
#1361744
Lesenswert?

Jonas Arndt schrieb:

> Arg - übersehen - morgen auf arbeit mal nen spannungsteiler ranbasteln.

Du brauchst keinen Spannungsteiler oder -Regler, sondern eine Brille. 
Nämlich für's lesen vom Datasheet, in dem drinsteht, wie man das Teil 
korrekt mit Strom versorgt. Der Regler ist ja da schon drin, nur muss 
man den auch korrekt verwenden.

Und wenn du Pech hast brauchst du auch einen neuen Controller. Die 
2,8V/3,0V (je nach Typ) sind nämlich das absolute Maximum und was in 
dieser Beschaltung bei bei ENVREG=offen passiert wissen nur die Götter.

Einfach nach dem Motto vorgehen, das wird schon genauso sein wie bei 
Atmel, brauch ich nicht erst nachzusehen, das funktioniert nicht.
OP (Firma: GreenWire-Elektronik) #1361755
Lesenswert?

A. K. schrieb:
> Jonas Arndt schrieb:
>
>> Arg - übersehen - morgen auf arbeit mal nen spannungsteiler ranbasteln.
>
> Du brauchst keinen Spannungsteiler oder -Regler, sondern eine Brille.
> Nämlich für's lesen vom Datasheet, in dem drinsteht, wie man das Teil
> korrekt mit Strom versorgt. Der Regler ist ja da schon drin, nur muss
> man den auch korrekt verwenden.
>
> Und wenn du Pech hast brauchst du auch einen neuen Controller. Die
> 2,8V/3,0V (je nach Typ) sind nämlich das absolute Maximum und was in
> dieser Beschaltung bei bei ENVREG=offen passiert wissen nur die Götter.
>
> Einfach nach dem Motto vorgehen, das wird schon genauso sein wie bei
> Atmel, brauch ich nicht erst nachzusehen, das funktioniert nicht.

Zugegeben da hab ich echt mist gebaut - danke für die erleuchtung ;)

aber was zum henker ist envreg?
OP (Firma: GreenWire-Elektronik) #1361813
Lesenswert?

Also Jungs - ich hab extra nochmal das neue Datenblatt geladen

http://ww1.microchip.com/downloads/en/DeviceDoc/70175H.pdf

das ist für diesen chip verlinkt auf microchip.com

Die haben 2009 nen neues rausgebracht wie ich sehe.

Allerdings finde ich in dem ganzen Datenblatt und auch in der Voltage 
Regulator Section nichts über diesen ominösen Pin. Außerdem verbitte 
halte ich solch einen Tonfall für unangebracht.

Und auf den ENVREG-Pin in meinem Schaltplan zurückzukommen - warum ist 
da wohl keine Pinnummer dran?
OP (Firma: GreenWire-Elektronik) #1361828
Lesenswert?

A. K. schrieb:
> Dein Schaltbild mit dem falschen Chip hat einen solchen Pin jedenfalls.
> Es ist Kap 21.2 gemeint.
>
> Wer im Schaltplan den falschen Chip der falschen Chipfamilie mit etwas
> anderen Pins postet, der sollte sich über die entsprechenden Kommentare
> nicht wundern.

Ich denke vl sollten sich hier einige eher überlegen ob der Ton 
angemessen ist. Vorallem wenn mir jemand erklärt das er den Pin nirgends 
finden kann würde ich zumindest mich rückversichern via Datenblatt und 
nicht denjenigen beleidigen - Danke an alle für die Hilfe
#1361939
Lesenswert?

so, jetzt ist fertig mit schlammschlacht, schliess einfach die folgenden 
pins so an
Pin 10, (19), 26, 38, 57 sind an VDD zu schliessen = +3.3V
Pin 9, (20), 25, 41 sind an GND zu schliessen
Pin 39, 40 einen quarz (vorteilhaft 10MHz) mit je 2 kondensatoren
Pin 56 = VDDCORE einen tantal-kondensator mit 10uF

die pins in klammern sind die referenzspannungen für den ADC, falls du 
den gleich mit GND/VCC betreiben willst

VDDCORE ist der pin des internen spannungreglers, der zur 
spannungsstabilisierung einen kondensator braucht (darum der 10uF)

ps: das nächste mal liesst du bitte selbst das datenblatt - danke
Angehängte Dateien:
OP (Firma: GreenWire-Elektronik) #1361949
Lesenswert?

Master Snowman schrieb:
> so, jetzt ist fertig mit schlammschlacht, schliess einfach die folgenden
> pins so an
> Pin 10, (19), 26, 38, 57 sind an VDD zu schliessen = +3.3V
> Pin 9, (20), 25, 41 sind an GND zu schliessen
> Pin 39, 40 einen quarz (vorteilhaft 10MHz) mit je 2 kondensatoren
> Pin 56 = VDDCORE einen tantal-kondensator mit 10uF
>
> die pins in klammern sind die referenzspannungen für den ADC, falls du
> den gleich mit GND/VCC betreiben willst
>
> VDDCORE ist der pin des internen spannungreglers, der zur
> spannungsstabilisierung einen kondensator braucht (darum der 10uF)
>
> ps: das nächste mal liesst du bitte selbst das datenblatt - danke

Danke für die Mühe - aber jetzt reichts langsam. Ich hab den Teil mit 
VDDcore falsch gelesen - keine Frage. Aber genau weil ich nicht 
rausbekommen hab wo der Fehler war, weil ich annahm das mein Layout 
richtig ist, hab ich hier um Hilfe gebeten - großteils hab ich nur dumme 
Sprüche zu hören bekommen. Was soll das denn? Das irgendwo nen Fehler 
war war mir ja bewusst und ich bitte um hilfe - und die antworten - echt 
das letzte.

Die Belegung hab ich mittlerweile geändert - im neuen Datenblatt von 09 
ist praktischerweise auch ne Minimumbeschaltung angegeben - trotzdem 
danke. Hatte gehofft auf den Quarz verzichten zu können -_-

Ich weiß im Übrigen nicht mit was der Rest hier SLPs zeichnet - aber ich 
nutze Eagle. Und da ich nicht jedes Bauteil neuzeichnen will weil das 
einfach nicht praktisch ist, nehm ich auch gern pinkompatibles und halte 
mich einfach an die Pinnummer und ignorier die Bezeichnung - klappt 
soweit ganz gut! Und falls das mal jemand nachließt - den besagten 
Enable Voltage Regulator Pin gibt es beim 206 nicht!
#1361961
Lesenswert?

> nehm ich auch gern pinkompatibles und halte mich einfach an die Pinnummer
naja, aber deine beschaltung sieht nicht danach aus
z.b. programmierleitung oder der MCLR hängt nach abziehen des 
programmierers in der luft, keine stützkondensatoren... man kann schon 
einen gehäuse- und pin-kompatiblen IC nehmen, aber dann
1. pins auch richtig beschalten/belegen
2. vielleicht hier erwähnen, ansonsten musst du - wie bemerkt, -gewisse
   sprüche hören - sorry das ist so!
OP (Firma: GreenWire-Elektronik) #1361962
Lesenswert?

Michael H. schrieb:
> auch wichtig ist, dass du NICHT IM DEBUGMODE bist
>
> wenn du das PICKit abziehst muss der Chip im Programmiermodus des PICKit
> beschrieben werden.
>
> andernfalls tut sich nix ohne druck auf die Playtaste ;)

Das hatte ich anfangs - hab aber mittlerweile ;) im Pulldownmenü RELEASE 
gewählt - ich hab den Fehler halt an der falschen Stelle gesucht.
OP (Firma: GreenWire-Elektronik) #1361969
Lesenswert?

Master Snowman schrieb:
> ok, programmierleitungen sind OK - sorry - ich dachte man müsse(!) RB6/7
> brauchen ;-)

nee hattest schon recht - der master reset hängt danach in der luft - 
ich mein ist halt meine schuld - das ist nur teil meines projektes und 
nachdem ich den 160-poligen 3-port-switch verdrahtet hatte hab ich da 
wohl nen bischen geschlust. aber morgen bau ich meinen letzten 
verbliebenen PIC auf und verdrahte den neu - werd rückmeldung geben obs 
klappt ;)
#1361973
Lesenswert?

>> Das hatte ich anfangs - hab aber mittlerweile ;) im Pulldownmenü RELEASE
>>gewählt - ich hab den Fehler halt an der falschen Stelle gesucht.

sorry, ich hab das PICKit nicht, aber ich weiß das kann teilweise 
Debuggen

folgich kann man es im MPLAB als Programmer ODER Debugger anmelden.

wichtig is das es im Dropdownmenu Programmer angemeldet ist. Diverse 
Warnmeldungen lesen und dann akzeptieren ;)

und vorallem lass das PICKit dran und toggle den Masterclear mit den 
ensprechenden Buttons im MPLAB
#1361975
Lesenswert?

> Hatte gehofft auf den Quarz verzichten zu können -_-

Was bringt dich zu dieser Auffassung?
Der interne FRC mit 7,3MHz geht doch prima.


Noch eine Anmerkung zu den verschiedenen PGC / PGD Leitungen:
zum Programmieren kann man jedes beliebige Paar nehmen - zum debuggen 
nur das bei der Programmierung mit den configbits eingestellte.
OP (Firma: GreenWire-Elektronik) #1368750
Lesenswert?

Also, ich hab nun folgendes Programm:
1
#include "p24HJ128GP206.h"
2
#include <libpic30.h>
3

4
_FBS(RBS_NO_BOOT_RAM & BSS_NO_BOOT_CODE & BWRP_WRPROTECT_OFF);  // Boot Segment
5
_FSS(RSS_NO_SEC_RAM & SSS_NO_SEC_CODE & SWRP_WRPROTECT_OFF);  // Secure Segment
6
_FGS(GSS_OFF & GCP_OFF & GWRP_OFF);                // Code/Write Protect
7
_FOSCSEL(FNOSC_FRC & IESO_OFF);                // Oscillator
8
_FOSC(FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMD_NONE);          // Clock
9
_FWDT(FWDTEN_OFF & WINDIS_OFF);                  // Watchdog
10
_FPOR(FPWRT_PWR1);                        // Power-on Reset Value
11
_FICD(BKBUG_OFF & COE_OFF & JTAGEN_OFF & ICS_PGD3);        // Register FICD (with debugger)
12
//_FICD(BKBUG_OFF & COE_ON & JTAGEN_OFF & ICS_NONE);        // Register FICD (without debugger)
13

14

15
int main(void) {
16

17
  ODCG &= 0x0000;
18
  
19
  TRISG = 0x0000;
20
  TRISB = 0x0000;
21
  AD1PCFGH = 0xFFFF;
22
  Nop(); // Required if a port/latch is accessed in a next command
23
  //LATG = 0xFFFF;
24
  
25
  while(1) {
26
    LATGbits.LATG15 = 1;
27
  LATBbits.LATB10 = 1;
28
  Nop();
29
    __delay32(10000000);
30
    //LATGbits.LATG15 = 0;
31
  //LATBbits.LATB10 = 0;
32
    __delay32(10000000);
33
  }
34
}

Im Debugmode läuft es, wenn ich das normal programmiere klappts nicht. 
(Ich kann Highpegel messen im Debugmode - normal nicht - gemessen mit 
Multimeter) Ich würd irgendwie immer noch auf Clocking tippen aber ich 
find den Fehler nicht. MCLR ist High, Speisung durch PICKIT2 oder extern 
(LDO) - macht keinen Unterschied am Ergebnis. Debugmode mit Power 
through PICKIT2

Hat einer ne Idee?
Gast #1635398
Lesenswert?

Kleiner Tip für alle die mit der HW- Beschaltung nicht klar kommen.
Auf der Microchip HP kann man alle Schemas zu den Eval- Boards 
downloaden.

Da ich davon ausgehe, dass der Hersteller der Chips weiss, wie man seine 
Controller beschalten muss ist dies immer eine gute Hilfe, die erste 
Hürde zu nehmen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren