Forum: Mikrocontroller und Digitale Elektronik PIC18F4550 - PIC macht "nix"


von PIC N. (eigo) Benutzerseite


Lesenswert?

Hallo zusammen,
ich habe Schwierigkeiten meinen PIC18F4550 in Betrieb zu nehmen!

Ich habe zunächst erstmal nur vor mit dem PIC ganz simpel zwei LEDs und 
einen Piezosummer zu schalten, alle jeweils mit Transistor verschaltet.
Wenn ich den PIC aus der Fassung nehme und an die jeweiligen Steuerpins 
5V anlege leuchten die LEDs und der Piezosummer summt, also stimmt 
schonmal der "Rest" der Schaltung.

Allerdings macht es der PIC nicht. Ich programmiere den PIC in C und 
habe als Taktquelle einen 20MHz Quarz mit 15pF Lastkondensatoren 
gewählt. Die 15pF habe ich aus dem Datenblatt so entnommen.

Ich habe mal ein Screenshot vom Signal am OSC2 Pin gemacht und 
angehängt.
Was ich komisch finde: Wenn ich am OSC1 Pin mit dem Scope messe und ich 
so vorgehe, dass ich den Tastkopf mit an den PIN hänge und DANN die 
Spannung einschalte, dann messe ich ein Signal 20Mhz und ca. 2,3V mit 1V 
Offset.

Wenn ich aber wiederum es umgekehrt mache also die Spannung einschalte 
und jetzt erst mit dem Tastkopf an den PIN gehe, messe ich das selbe 
Signal aber mit 2,8V Amplitude (immer noch 1V Offset!).

Am Ausgang (OSC2) ist bei beiden Varianten das Signal wie im Anhang!

Hier jetzt nochmal mein Code, ganz simpel möchte ich nur die drei 
Ausgänge auf High schalten:
1
#include <p18f4550.h>               // Für den PIC - wird autom. erkannt
2
#include "delays.h"                      // Für die Warteschleife 
3
4
#pragma config FOSC=HS            // Taktbereich auswählen
5
#pragma config PWRT=ON            // Power On Timer An
6
#pragma config WDT=OFF            // 
7
#pragma config BOR=OFF            // Brown Out Reset Aus
8
#pragma config LVP=OFF            // Low Voltage Programming Disable
9
#pragma config PBADEN=OFF          // 
10
#pragma config VREGEN=OFF          //
11
#pragma config MCLRE=ON            // Master Clear Reset An
12
13
14
15
void main(void)  
16
{
17
    LATA = 0x00;                    // PORTA löschen (kann beim Start undef. Zustand annehmen)
18
    LATB = 0x00;                    // PORTB löschen (kann beim Start undef. Zustand annehmen)
19
    LATC = 0x00;                    // PORTC löschen (kann beim Start undef. Zustand annehmen)
20
    LATD = 0x00;                    // PORTC löschen (kann beim Start undef. Zustand annehmen)
21
    LATE = 0x00;                     // 
22
23
    TRISA = 0x29;                   // 
24
    TRISB = 0xFC;                   // 
25
    TRISC = 0x02;                   //   
26
    TRISD = 0x00;                   // 
27
    TRISE = 0x00;                   // 
28
29
    ADCON1 = 0x0F;          // Alle Port Pins auf Digital gesetzt
30
31
//  GLCD_Init();
32
//  Setup_ADC();
33
34
  while(1);
35
  {
36
    LATAbits.LATA2 = 1;      //  
37
    LATEbits.LATE0 = 1;      //
38
    LATAbits.LATA4 = 1;      //  
39
  }
40
}

Dann habe ich nebenbei gleich nochmal eine Frage und zwar arbeite ich 
bei dieser Schaltung mit ICSP der Brenner erkennt den PIC und brennt ihn 
auch ohne Probleme. Jetzt meine Frage muss ich eigentlich dann RB7/6 als 
Eingänge konfigurieren oder spielt das keine Rolle?

Ich hoffe Ihr wisst was da schief läuft und ich bedanke mich jetzt schon
im voraus für jeden der helfen möchte!!

LG Nico

von PIC N. (eigo) Benutzerseite


Angehängte Dateien:

Lesenswert?

Oh der Anhang ging wohl verloren!

von PIC N. (eigo) Benutzerseite


Lesenswert?

Also ich habe mal den 20Mhz mit den beiden 15pF durch 4Mhz und 2x 30pF 
getauscht das hat am Verhalten nix geändert! Aber jetzt gefällt mir das 
Signal an OSC1 besser (3,8V @4Mhz OHNE Offset)!

Irgendwelche Tipps?

von Stefan (Gast)


Lesenswert?

Schaltplan ?

von stephan_ (Gast)


Lesenswert?

#pragma config MCLRE=ON            // Master Clear Reset An

1. Stell den mal OFF oder leg den MCLRE per Widerstand auf VDD.

2. Mach die Kondensatoren mal grösser, ich habe gute Erfahrungen mit 27 
oder 33 pF gemacht.

3. An OSC1 zu messen, verfälscht die ganze Charakteristik des 
Oszillators. Man darf PICs nur an OSC2 messen.

4. Beim Brennen sind die Zustände von RB6/RB7 egal.

von Zwirbeljupp (Gast)


Lesenswert?

5. Mal auf den internen 8 MHz - Oszillator umschalten, um Probleme mit 
dem externen Quarz auszuschließen.

von PIC N. (eigo) Benutzerseite


Angehängte Dateien:

Lesenswert?

Also ich hätte den Schaltplan gerne als Grafik angehängt der ist aber so 
groß, dass wenn ich einen Screenshot mache man die Werte etc. nicht mehr 
lesen kann daher die Target Datei im Anhang wer Target nicht hat ich 
beantworte auch alle Anfragen.

Zu 1. Habe den MCLRE Pin über 20K und 1N4148 auf Vdd.
Zu 2. Wie gesagt habe schon auf 4Mhz gewechselt und damit 30pF, hilft 
nicht.
Zu 3. Gut zu wissen!
Zu 4. Danke!
Zu 5. Kann ich dann die Verbindungen bei behalten oder muss ich den 
Quarz auslöten?

von PIC N. (eigo) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ist so zwar nicht gerade komfortabel aber ich hoffe es geht 
einigermaßen.

edit: Die Batterie und der Goldcap sind nicht bestückt!

von Zwirbeljupp (Gast)


Lesenswert?

> Zu 5. Kann ich dann die Verbindungen bei behalten oder muss ich den
> Quarz auslöten?
Kann angeschlossen bleiben.

Oha, das ist mal ein wilder Schaltplan. Da würde mich dann doch dazu 
auch ein Foto des Aufbaus interessieren...

von PIC N. (eigo) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ja der Schaltplan entstand immer so nach und nach, da wurde es dann 
etwas wirr =)

von Stefan (Gast)


Lesenswert?

Was soll denn da für ein LCD dran ?
Ein normales LCD hat 6 Leitungen und mehr nicht.
Und was soll die Diode D1,D2 für einen Sinn haben ?

von PIC N. (eigo) Benutzerseite


Lesenswert?

Hi, kommt ein Grafik LCD dran aber das später. Die Diode D1 ist eine 
Schottky Diode zum entkoppeln der Vdd/PIC von Vdd/Rest damit mein 
Brenner nicht die ganze Schaltung (dann GLCD) mit 5V versorgt. Und die 
D2 ist auch wegen dem ICSP, damit die Programmierspannung von 12V nicht 
leitend zu den 5V verbunden ist.

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Wer es sich an tun will, mal als PNG angehängt

von PIC N. (eigo) Benutzerseite


Lesenswert?

Danke!

von Sebastian H. (sebihepp)


Lesenswert?

Laut Microchip sollten beim Quarz beide Anschlüsse über ein C nach GND.

von Zwirbeljupp (Gast)


Lesenswert?

> Laut Microchip sollten beim Quarz beide Anschlüsse über ein C nach GND.
...und laut Schaltplan und Foto hat der TE dies auch korrekt 
umgesetzt...

von PIC N. (eigo) Benutzerseite


Lesenswert?

Bin echt am verzweifeln.. woran liegt das denn zum Geier ^^
@ Sebastian, Hey danke habe ich aber gemacht.. =/

von stephan_ (Gast)


Lesenswert?

Aus dem Photo: Die Quarze und die Last-Kondensatoren sind für 20MHz 
erkennbar zu weit vom PIC weg. So dicht wie möglich, die Cs am besten 
gleich an den PIC (da kleiner), danach unmittelbar den Quarz.

von PIC N. (eigo) Benutzerseite


Lesenswert?

Ja habe das auch schon wo anders gelesen habe daher auch den 20Mhz durch 
einen 4MMhz Quarz ersetzt mit jeweils 30pF Last Kondensatoren.

Also bei 4Mhz kann der Abstand nicht mehr das Problem sein, das habe ich 
nämlich schon bei x anderen Schaltungen (anderer PIC) genauso gemacht =(

von stephan_ (Gast)


Lesenswert?

Poste mal ein Oszill.-Photo vom Anschluss OSC2.

Noch ne Idee_1: schliess mal einen Widerstand 330 Ohm zwischen Quarz und 
OSC2 an (so wie bei den Resonatoren im Datenblatt) oder einen Widerstand 
1 MOhm parallel zum Quarz.

Noch ne Idee_2: Bau Dir aus einem Gatter (Inverter), Quarz und den 
Kondensatoren einen externen Oszillator (oder nimm einen fertigen, falls 
vorhanden) und schliess den an OSC1 an. Wenns dann geht, ist es das 
Platinenlayout.

von PIC N. (eigo) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier an OSC2 gemessen..

von stephan_ (Gast)


Lesenswert?

Das sollte aber ein Rechteck sein ...

Brauchst Du denn unbedingt - z.B. wegen zeitkritischer Dinge - einen 
Quarz für den Oszillator, bei mir reichen in 90% der Schaltungen die 1% 
Genauigkeit des internen Oszillators. Wie ich sehe, hast du ja auch den 
timer1 schon für einen Quarz vorgesehen (mache ich auch gerne), da 
kannst Du ja auch genaue Zeiten abgreifen. Oder nimm einen Resonator 
(0.5% Genauigkeit), 20 MHz sind aber schwierig zu beschaffen (z.B. bei 
http://www.futurlec.com/ICCrystalsResonators.shtml, Lieferzeit meist 
etwa 2 Wochen).

von Zwirbeljupp (Gast)


Lesenswert?

Meine Güte, jetzt teste das Ganze doch einfach mal mit dem internen 
Oszillator.
Ich glaube nicht, dass es an der externen Taktversorgung liegt. Das Ding 
schwingt doch ganz passabel.
Vielleicht baut der Compiler auch einfach nur Mist oder es liegt 
anderweitig ein Problem in der Software vor. DAS solltest Du zuerst 
ausschließen und dafür gibt es keinen einfacheren Weg als über den 
IntOsc.

von PIC N. (eigo) Benutzerseite


Lesenswert?

Hi, nein für den PIC als Takt ist es unkritisch, da ich ja wie du ja 
schon erkannt hast den Timer1 vorbereitet habe. Kannst du mir sagen wie 
man den internen Oszillator verwendet?

Ich habe im Datenblatt erstmal nur das OSCCON Register gefunden und 
würde daraus erstmal schließen, dass ich SCS1 und IRCF0-2 auf 1 setzten 
muss, ist das richtig? Was muss noch gemacht werden..?

Danke soweit schon mal ... =)

von Zwirbeljupp (Gast)


Lesenswert?

> Kannst du mir sagen wie man den internen Oszillator verwendet?
> Ich habe im Datenblatt erstmal nur das OSCCON Register gefunden und
> würde daraus erstmal schließen, dass ich SCS1 und IRCF0-2 auf 1 setzten
> muss, ist das richtig? Was muss noch gemacht werden..?

An dieser Stelle ist die Hilfedatei "hlpPIC18ConfigSet.chm" aus dem 
C18-Doc-Verzeichnis sehr zu empfehlen.

Ich würde erstmal folgendes vorschlagen:

Config Bits:
FOSC = INTOSC_HS

...und dann noch im OSCCON-Register die Frequenz konfigurieren
(wenn Du dies nicht tust - auch nicht schlimm - dann läuft der PIC 
standardmäßig mit 1 MHz).

gruß
daniel

von Helmut (Gast)


Lesenswert?

Kenne mich mit C nicht so aus, aber eine fehlende Compare-Zuweisung ist 
ein Fehler, den ich immermal gerne vergesse.
CMCON=0x07

Ausserdem gefällt mir deine MCLR-Beschaltung nicht, setze den Pin 
einfach mal an Gnd, zum Testen.

USB hast du nicht in der Configuration eingeschaltet?

von PIC N. (eigo) Benutzerseite


Lesenswert?

Also habe mal die Config wie folgt geändert:
1
#pragma config FOSC=INTOSC_HS    // Taktbereich auswählen
2
#pragma config PWRT=ON      // Power On Timer An
3
#pragma config WDT=OFF      // 
4
#pragma config BOR=OFF      // Brown Out Reset Aus
5
#pragma config LVP=OFF      // Low Voltage Programming Disable
6
#pragma config PBADEN=OFF    // 
7
#pragma config VREGEN=OFF    //
8
#pragma config MCLRE=ON      // Master Clear Reset An

Und dann noch die Frequenz auf 8Mhz eingestellt:
1
OSCCONbits.IRCF0=1;
2
OSCCONbits.IRCF1=1;
3
OSCCONbits.IRCF2=1;

@Helmut, die Beschaltung für den MCLRE Pin habe ich mir so von Sprut ab 
geguckt: http://www.sprut.de/electronic/pic/icsp/icsp.gif

USB ist nicht eingeschaltet.. Ich werde die Comparatoren mal einstellen 
bzw. aus stellen.. mal schaun.

von Helmut (Gast)


Lesenswert?

Sehe gerade: USBVoltage ist ausgeschaltet.
Wenn nichts hilft, könnte ich dir mal ein Testprogramm zum Testen der 
Ports schreiben.

von stephan_ (Gast)


Lesenswert?

MCRLE gehört NICHT an GND, da dann Dauer-Reset


für die CONFOG:

   FOSC = INTOSC_HS     ; die PLL geht nur beim Quarz,
                        ; nicht beim int. Oszillator

und weiter in Assembler:

   movlw b'01110010'    ; int. Oszill. 8 MHz
   movwf OSCCON

bzw. in C:

   OSCCONbits.SCS1=1;
   OSCCONbits.SCS0=0;

von PIC N. (eigo) Benutzerseite


Lesenswert?

Also ich habe den internen Oszillator eingeschaltet, so lange das 
richtig war:
1
#pragma config FOSC=INTOSC_HS    // Taktbereich auswählen
2
3
OSCCONbits.IRCF0=1;
4
OSCCONbits.IRCF1=1;
5
OSCCONbits.IRCF2=1;

..dann noch die Komparator Eingänge deaktiviert:
1
CMCON=0x07;

und dann nochmal den internen Oszillator ausgeschaltet und die 
Abschaltung der Komparator Eingänge behalten. Nichts passiert. Habe 
jetzt noch mit rein geschrieben, dass er den kompletten PORTD auf High 
setzten soll:
1
LATD=0xFF;

..und hier passiert auch nichts.


@Helmut, das wäre super! Vielleicht ist ja auch der PIC kaputt wobei
ich das noch nie erlebt habe zumal lässt er sich auch problemlos 
brennen..

von stephan_ (Gast)


Lesenswert?

Du musst noch die SCS-Bits im OSCCON setzen (siehe oben)

von stephan_ (Gast)


Lesenswert?

... und schalte den verdammten MCLRE ab, der stört nur

#pragma config MCLRE=OFF

von Helmut (Gast)


Lesenswert?

LatD=0xFF ? nicht PortD=0xFF

Nagut, ich setze mich gleich mal hin, Quarz 8Mhz hast du?

von holger (Gast)


Lesenswert?

>... und schalte den verdammten MCLRE ab, der stört nur
>#pragma config MCLRE=OFF

Das lässt er besser mal schön so wie es ist.
Ich würde mir mal ein Multimeter schnappen
und den Pegel am Reset Pin messen. Wenn da keine
5V sind dann läuft auch nix.

von PIC N. (eigo) Benutzerseite


Lesenswert?

Sorry hatte ich zu spät gelesen. Also auch wenn ich den internen 
Oszillator benutzte funktioniert es nicht (auch bei abgeschaltetem 
MCLRE).

von PIC N. (eigo) Benutzerseite


Lesenswert?


von PIC N. (eigo) Benutzerseite


Lesenswert?

Also wenn ich den MCLRE aus schalte und INTOSC verwende hab ich doch ein 
Problem oder:

http://www.sprut.de/electronic/pic/fallen/fallen.html#intoscmclr

von stephan_ (Gast)


Lesenswert?

Den MCLRE braucht er nicht, da mit

#pragma config PWRT=ON      // Power On Timer An

ein sauberer Reset gesichert ist und die Schaltung sowie keinen 
Hardware-Reset vorsieht.

von stephan_ (Gast)


Lesenswert?

Das INTOSC und MCRLE-Problem gibt es nur beim Brennen. Ich habe mit 
dieser Configuration aber noch nie Probleme gehabt.

Dazu eine Idee: kann der Brenner den PIC auslesen? Dann schau mal, wo 
das Programm steht.

von PIC N. (eigo) Benutzerseite


Lesenswert?

Am MCLR habe ich 4,77V durch die Diode bedingt aber das hab ich wie 
gesagt so von Sprut und das kann auch nicht die Ursache sein, da ich das 
bei vorher gehenden Schaltungen genauso gemacht habe.

von PIC N. (eigo) Benutzerseite


Lesenswert?

Ich kann den PIC auslesen habe dann das Hex File hilft das? Also kann 
man daraus erlesen wo das Programm steht?
1
:020000040000FA
2
:100000006FEF00F012000000060EF66E000EF76EA5
3
:10001000000EF86E00010900F550656F0900F550FB
4
:10002000666F03E1656701D03DD00900F550606F50
5
:100030000900F550616F0900F550626F0900090071
6
:10004000F550E96E0900F550EA6E09000900090053
7
:10005000F550636F0900F550646F09000900F6CF91
8
:1000600067F0F7CF68F0F8CF69F060C0F6FF61C0C5
9
:10007000F7FF62C0F8FF0001635302E1645307E039
10
:100080000900F550EE6E6307F8E26407F9D767C020
11
:10009000F6FF68C0F7FF69C0F8FF00016507000EB2
12
:1000A000665BBFD71200896A8A6A8B6A8C6A8D6A1E
13
:1000B000290E926EFC0E936E020E946E956A966AED
14
:1000C0000F0EC16ED388D38AD38CD382D390070E00
15
:1000D000B46EFFD789848D8089888C68120013EEF6
16
:1000E00000F023EE00F0F86A019C04EC00F084ECD0
17
:1000F00000F053EC00F0FBD7120000EE00F00F0E02
18
:0A010000EE6AEA62FDD71200120059
19
:020000040030CA
20
:0E0000003F0B181E000181000FC00FE00F40E3
21
:00000001FF

Das erscheint mir auch irgendwie ein bisschen wenig oder?
Ich benutze übrigens noch den Brenner8 von Sprut.

von Zwirbeljupp (Gast)


Lesenswert?

Häng mal das List-File (also die vom Compiler erzeugte 
Assembler-Listing-Datei) von Deinem Programm hier an. Und das C-File 
gleich mit.

> Du musst noch die SCS-Bits im OSCCON setzen (siehe oben)
Nicht nötig, die SCS-Bits stehen standardmäßig auf der primären 
Taktquelle (und diese ist ja nun bereits über FOSC auf den internen OSC 
festgelegt).

> LatD=0xFF ? nicht PortD=0xFF
Port beschreiben: LatD
Port lesen: PortD

> Das erscheint mir auch irgendwie ein bisschen wenig oder?
Wieso? Was tut Dein Programm denn schon großartiges? :-D

von PIC N. (eigo) Benutzerseite


Angehängte Dateien:

Lesenswert?

Da hast du auch wieder recht =) Ja LATD ist mir schon klar hab mich nur 
vertippt ist aber richtig im Programm. Okay dann hier mal die beiden 
Dateien!
Ich weiß nicht genau welche Datei du damit meinst aber habe mal alles 
aus dem Ordner angehängt!

von Darkleon (Gast)


Lesenswert?

Hallo!

Hab jetzt nicht alles genau gelesen, aber hab gesehen, dass Du die 
20MHz, die dein Quarz liefert nicht teilst, da der PIC nur 4 MHz 
verträgt.

Ich würd folgende Einstellungen machen: (Der PIC läuft dann intern mit 
48 Mhz-- generiert durch PLL (96Mhz) / 2 = maximale Arbeitsfrequenz des 
18F4550)

FOSC = HSPLL_HS
PLLDIV = 5      //Divide by 5 (20 MHz oscillator input)
CPUDIV = OSC1_PLL2     //[OSC1/OSC2 Src: /1][96 MHz PLL Src: /2]

PLLDIV (Prescaler) musst Du auf jeden Fall machen, da der Input wie 
gesagt nur 4 MHz verträgt.

Versuch mal diese Einstellungen und berichte dann.

MfG Darkleon

von PIC N. (eigo) Benutzerseite


Angehängte Dateien:

Lesenswert?

Vergessen..

von Darkleon (Gast)


Lesenswert?

Zusatz:

So werden auch praktischerweise gleich die 96MHz für USB 2.0 generiert. 
Falls Du USB später mal brauchst.

Schön zu sehen auf Seite 26 des Datenblattes.

MfG Darkleon

von PIC N. (eigo) Benutzerseite


Lesenswert?

Hi Darkleon,
also habe deinen Tipp mal übernommen hat aber leider ebenfalls nicht zum 
Erfolg geführt. Trotzdem danke für die vielen Tipps!!!

edit: spielt ja jetzt erstmal keine Rolle da ich eh auf 4Mhz gewechselt 
habe sollte also kein Problem sein (ohne Teiler).

von Darkleon (Gast)


Lesenswert?

Hallo!

Hast Du auch folgendes aus Deinem Code genommen?
1
OSCCONbits.IRCF0=1;
2
  OSCCONbits.IRCF1=1;
3
  OSCCONbits.IRCF2=1;
4
    OSCCONbits.SCS1=1;
5
    OSCCONbits.SCS0=0;

Das gehört dann klarerweise nicht mehr dazu, da Du wieder mit Deinem 
externen Quarz arbeitest ;)

Meld Dich dann wieder.

Mfg Darkleon

von Darkleon (Gast)


Lesenswert?

Zusatz:

Und natürlich das:
1
CMCON=0x07;

MfG

von PIC N. (eigo) Benutzerseite


Lesenswert?

Hi ja selbstverständlich das habe ich raus genommen.

Aber CMCON=0x07; sollte doch stehen bleiben, sonst sind ja die Eingänge 
wieder auf Komparatorbetrieb?!?

von Darkleon (Gast)


Lesenswert?

Stimmt;)

In Deinem riesigen Schaltplanbild (arbeite mit einem 10" Netbook) sehe 
ich, dass der 20 MHz Quarz mit nur einem Kondensator nach GND verbunden 
ist. Es gehört aber an jedes Beinchen ein eigener Kondensator und die 
zusammen dann auf GND (Oder hab ich das nur nicht gesehen). Auch konnte 
ich die 100nF Kondensatoren zwischen VDD und GND am PIC nicht finden. 
(mit 10" und Mouspad ist das große Bild schnell unübersichtlich ;)). Die 
100nF kommen auf beide Seiten (Der Controller hat ja links und rechts 
VDD und GND, und diese müssen auch beschalten sein).

Hab ich das nur nicht in Deinem Schaltplan gesehen, oder hast Du es 
anders??

MFG Darkleon

von Zwirbeljupp (Gast)


Lesenswert?

Wenn das Assemblerlisting nicht erzeugt wird, dann tu bitte Folgendes 
(und zwar für den C-Code, den Du vorhin bereits angehängt hast!):

1.) Compilieren
2.) View->Disassembly Listing (daraufhin erscheint dieses in einem 
Fenster)
3.) Dort Rechtsklick und "Output to file..." wählen.
4.) Den Ranz hier mit Anhängen.

@alle anderen:
Vielleicht erstmal nicht weiter Verwirrung mit unterschiedlichsten 
Oszillatoreinstellungen stiften. Der interne OSC ist in diesem Fall 
definitiv die einfachste/sicherste Methode und wenn sich hier schon 
nichts rührt, dann liegt es wohl eher am Code des Testprogramms (oder 
doch an der Hardware...)

von PIC N. (eigo) Benutzerseite


Angehängte Dateien:

Lesenswert?

@Darkleon ist alles angeschlossen siehe Anhang!

@Zwirbeljupp, die txt ist im Anhang, danke dass du dich so rein hängst 
=)!

von holger (Gast)


Lesenswert?

:020000040030CA
:0E0000003F0B181E000181000FC00FE00F40E3

Die Config Words sehen gut aus. Eigentlich müsste der jetzt
mit INTOSC laufen.

Da ist doch was oberfaul;)

von Darkleon (Gast)


Lesenswert?

Hallo Zwirbeljupp!

Also ich schließe mal die Software aus, denn er hat den richtigen PIC 
gewählt.
Dann definiert er z.B.: den kompletten Port D mit 0. Danach setzt er den 
kompletten Port auf Ausgang und in seiner Schleife schaltet er den 
kompletten PortD auf High. Auch wenn einige Pins am PortD mit 
irgendeiner Hardware standardmäßig arbeiten sollte zumindest eine (oder 
mehrere LEDs leuchten).

Voausgesetzt ist natürlich, dass der Teiler (bei 4MHZ nicht notwendig) 
richtig eingestellt ist, die richtige Option für den Takt ausgewählt ist 
(HS,HS_PLL,...),der Quarz und die Versorgnungspins korrekt mit 
Kondensatoren beschaltet sind und die richtige Spannung an den richtigen 
Pins anliegt ;).

Ist eines nicht korrekt läufts nicht, und da die Software schon mit fast 
allen möglichen Taktmöglichkeiten probiert wurde (und diese durchaus 
korrekt waren) schließe ich die Software aus.

MfG Darkleon

von Helmut H. (der_andere)


Angehängte Dateien:

Lesenswert?

Anbei ein Testprogramm, macht bei 8Mhz jedes PortPin für 1 sek auf High.
Konnte es nicht testen. Habe iM nur ein 2550, da lief es(Beschränkte 
Ports)
Gruß Helmut

von Darkleon (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

Ja Deine Anschlüsse sind falsch. Richtigerweise (auch zu sehen im 
Datenblatt) im Anhang. Der 100nF Kondensator zwischen VDD und GND soll 
so knapp wie möglich an den PIC. So wie im Anhang dann auch auf der 
rechten Seite des 18F4550,denn dort hat er auch Pins für VDD und VSS. 
Diese müssen auch mit der Versorgungsspannung verbunden werden.

Also korrigiere das mal und versuche es mit dem externen Quarz, 
(Anschluss auch im Anhang).

Dann sollte es hardwaremäßig keine Probleme mehr geben.

Gib dann Bescheid.

MfG Darkleon

von Darkleon (Gast)


Lesenswert?

Oh Gott, wie bin ich denn heute drauf.....

Sorry,vergiss meinen letzten Post. Hast es ja eh korrekt. Sah nur die 
zweiten Kondensatoren bei den Quarzen nicht....

Sorry..muss mal eine Rauchen gehen ;)

Mfg Darkleon

von PIC N. (eigo) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hi =) So ist es auch.

Ich habe beide Vdd und beide Vss verbunden und zusammen dann mit einem 
100nF gekoppelt. Der 100nF ist aller höchstens 2cm von den Pins 
entfernt.

siehe Anhang, LG

edit: Ok hat sich ja dann erledigt =) Kein Problem ich freue mich dass 
mir geholfen wird!!

von Helmut H. (der_andere)


Lesenswert?

Solltest deinen 2200µF Elko mal überdenken, der Ladestrom könnte die BAT 
gefährden. 2200 am Eingang Spannungsregler -->7805  --->Diode--->100µF 
sollte auch gehen.
Ist eigentlich Schade, dass du den USB-Kram nicht benutzt und die GLCD 
Pins so benutzt. Wäre `ne schöne Sache für Später.
Aber, deine Sache ;-)

von PIC N. (eigo) Benutzerseite


Lesenswert?

Danke für den Tipp. Ja also Schade ist es stimmt schon aber das ist erst 
mein 2. mal mit einem GLCD und dieses hat dazu noch Touch deshalb will 
ich erstmal Schritt für Schritt anfangen. Und jetzt läuft ja nicht mal 
der PIC ^^

von Darkleon (Gast)


Lesenswert?

Hast Du das auch auf einem Steckbrett?

Ich glaube nämlich immer noch, dass nur ein 100nF für beide VDDs zu 
wenig ist, denn ich auf beiden Seiten jeweils einen 100nF und in 
diversen Schaltplänen im Netz hab ich auch immer zwei gesehen. Bei mir 
läufts (zwar nicht Dein Code, da ich momentan keine Möglichkeit habe den 
zu testen) und ich glaube deshalb,dass nur ein 100nF zu wenig ist..Kann 
mich aber natürlich auch täuschen.

MfG Darkleon

von PIC N. (eigo) Benutzerseite


Lesenswert?

Ne habe es leider leider nicht aufm Brett... das wäre evtl. noch ne 
Möglichkeit. Ich werde einfach einen rein löten Masse habe ich ja eh 
überall (Polygon)..

von holger (Gast)


Lesenswert?

>Hast Du das auch auf einem Steckbrett?

Die Fotos oben nicht gesehen? Ich vermute
das da auf der selbstgebastelten doppelseitigen Platine
irgendwo ne Durchkontaktierung fehlt.

von PIC N. (eigo) Benutzerseite


Angehängte Dateien:

Lesenswert?

Also ein zusätzlicher 100nF direkt an dem PIN der erst den Bogen hinter 
dem 1. 100nF herum macht. An den beiden gelben Stellen im Bild (s. 
Anhang).
Aber das hilft auch nicht!

von Helmut H. (der_andere)


Angehängte Dateien:

Lesenswert?

Schau mal wie weit meine C`s sind. Dass es überhaupt nicht läuft hat 
sicher noch andere Ursachen

von PIC N. (eigo) Benutzerseite


Lesenswert?

holger schrieb:
> Ich vermute
> das da auf der selbstgebastelten doppelseitigen Platine
> irgendwo ne Durchkontaktierung fehlt.

Wieso? Es liegen doch überall die entsprechenden Signale an? Und der PIC 
und der Quarz hat Verbindung zur Masse.

von Darkleon (Gast)


Lesenswert?

Hi holger.

Klar hab ich die gesehen.
Ich hab aber geschrieben, ob er das AUCH auf einem Steckbrett hat.

Also zwischen
> Hast das auch auf einem Steckbrett?
und
> Hast das auf einem Steckbrett?

ist ein Unterschied, oder??

P.S.: Nich böse nehmen ;)

von Helmut H. (der_andere)


Lesenswert?

Mein Testprogramm läuft auch nicht?

von holger (Gast)


Lesenswert?

>Hi holger.
>
>P.S.: Nich böse nehmen ;)

Tu ich doch nicht;)

>Wieso? Es liegen doch überall die entsprechenden Signale an? Und der PIC
>und der Quarz hat Verbindung zur Masse.

Ja, wenn dein OSCI dranhängt schwingt der Quarz auch. Das sieht
eigentlich alles gut aus. Dein Programm läuft aber nicht.
Läuft es mit OSCI dran? Hast du das Programm von Helmut versucht?

Das stinkt doch geradezu nach Hardwarefehler!

von PIC N. (eigo) Benutzerseite


Lesenswert?

Hi mit dem Code von Helmut passieren jetzt diverse neue Dinge, kannst du 
mir mal genau beschreiben was du in dem Programm geschrieben hast? 
INTOSC?

Ich werde morgen weiter machen.. Melde mich dann wieder! Danke !!

von Helmut H. (der_andere)


Lesenswert?

Wird Nicolas doch hoffentlich "spannungsmässig" an den Prozessorpin`s im 
Betrieb durch gemessen haben, soviel Zeit wie schon in der Fehlersuche 
steckt.

Aber, wer kennt es nicht, die einfachsten Fehler sieht man nicht.  --->
ein neuer Tag, eine andere Sichtweise.... ;-) und da haben wir den 
Fehler....

von PIC N. (eigo) Benutzerseite


Lesenswert?

Morgen knacken wir's =)
So schaue Championsleague man man Bayern liegt 0:2 zurück =)
Bis morgen!

von Helmut H. (der_andere)


Lesenswert?

Recht hast du, mal was anderes sehen.
Das Programm macht als Enlosprogramm für PortA.0 bis PortD.7 für 1 Sek 
High an den entsprechenden Pin und schaltet ihn dann wieder aud Gnd.
Solltest deine Peripheriechips für den Test besser rausnehmen.

So:
while true


PortA.0=1
delay_ms(1000)
PortA.0=0

PortA.1=1
delay_ms(1000)
PortA.1=0

PortA.2=1
delay_ms(1000)
PortA.2=0

.....bis....

PortD.7=1
delay_ms(1000)
PortD.7=0

wend

'   Main program
end.

von PIC N. (eigo) Benutzerseite


Lesenswert?

Achso! Ja gut dann funktioniert dein Programm!
Ich dachte es würden alle an.. 1s.. alle aus.

Kannst du mir die C Datei schicken? Jetzt brenne ich aber darauf was der 
Fehler ist.

Nabend

von PIC N. (eigo) Benutzerseite


Lesenswert?

Wie geil ist das denn.. Bayern hat ManU raus gehauen :D herrlich!

von Helmut (Gast)


Lesenswert?

Bin ja kein Bayern Fan, aber England, nee, dann lieber Bayern.


Ist kein C-Programm, MikroeBasic, für C reicht mein Brain nicht.

Man kann aber auch mit Basic brauchbare Programme basteln.

Aber jetzt keine Diskussion ob C oder was weiß ich, jeder nach seinen

Fähigkeiten und Geschmack. Was hinten raus kommt zählt.

Siehe mein GLCD-Touchscreen-Modul für CAN- oder USB-Kontroller.

von PIC N. (eigo) Benutzerseite


Lesenswert?

Das ist ja ärgerlich. Dann habe ich jetzt aber den Beweis, dass meine 
Hardware i.O. ist. Also mal wieder ein bisschen nach 1 und 0 suchen =)

von Helmut (Gast)


Lesenswert?

Die Zeit mit einer Sekunde kommt hin?

Ausserdem, das ist doch erfreulich.

Freu dich darüber, seih stolz auf diesen Teil.

Mit dem C-Programm kann dir sicherlich auch jemand helfen.

Mach erst einmal ein ganz einfaches Main-Programm, PortB.1 blinken 
lassen

zB, damit testest du deine Configuration, wenn Das läuft mach weiter.

Viel Erfolg

von Zwirbeljupp (Gast)


Lesenswert?

So, bin gerade erst dazu gekommen, mir das Assemblerlisting zur Brust zu 
nehmen. Und - entgegen aller Zweifler - es liegt natürlich doch an einem 
verkorksten Programm!

Man schaue sich einmal folgenden Ausschnitt aus dem zuvor von Nicolas 
geposteten Code genau an:
1
  while(1);
2
  {
3
    LATAbits.LATA2 = 1;      //  
4
    LATEbits.LATE0 = 1;      //
5
    LATAbits.LATA4 = 1;      //  
6
  }

Man sieht es leider erst auf dem zweiten Blick, aber dann ist es 
ziemlich klar, warum weder Pin A2, E0 noch A4 gesetzt werden ;-)
Die Lösung des Rätsels gibts nach der Kaffeepause...

Gruß
Daniel

von PIC N. (eigo) Benutzerseite


Lesenswert?

Alles klar! Das ";" hinter while muss natürlich weg!
Man ey immer sone Kacke ^^ Vielen vielen Dank an alle!!!

von Helmut (Gast)


Lesenswert?

Bedeutet das, es läuft?

Hat dein Entwicklungssystem keinen Simulator?

von PIC N. (eigo) Benutzerseite


Lesenswert?

Ja läuft! Doch hat sie hätte ich mal benutzen sollen aber hinter her ist 
man ja immer schlauer.

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.