Forum: Mikrocontroller und Digitale Elektronik Anfänger PIC16F1518 läuft nicht


von Daniel B. (sir_hagbard)


Lesenswert?

Hallo zusammen!

Ich bin ein Anfänger... Mit dem Pic 12F628A und mit dem 16F629 komme ich 
zurecht und kann auch kleinere Programme schreiben.

Nun habe ich mich mal an den PIC16F1518 gewagt, mit dem Hintergrund 
diesen später mit C zu programmieren.

Aber zuerst wollte ich den mit Assembler in Betrieb nehmen.

Nur dieses Teil will einfach nicht starten.

Ich habe diesen auf einer kleinen SMD Platine mit einem 20MHz Quarz 
verbaut. Die SMD Kondensatoren am Quarz haben 22pF.

Nun dachte ich, vielleicht klappts ja mit dem internen Oszillator, 
allerdings bin ich auch da gescheitert.

Der PIC wird über eine ICSP-Leitung von dem Brenner 8 r5 von Sprut 
beschrieben. Wird ordnungsgemäß erkannt und gebrannt.
Aber startet nicht.

Nun muss ich dazusagen, dass der PIC kurzzeitig einmal eine 
Versorgungsspannung von 7,49 Volt hatte, weil ich den Spannungsregler 
dummerweise überbrückt hatte.
Kann man einen defekten PIC noch brennen?

Vielleicht kann ja einer mal über meinen Source-Code schauen, ob ich 
einen grundlegenden Denkfehler gemacht habe. Ich weiß nicht mehr 
weiter...

Dafür schonmal vielen Dank im voraus!
1
;##### Processor - Listing #########
2
  list p=16f1518
3
4
;##### File Include ################
5
  #include <p16f1518.inc> 
6
7
  ERRORLEVEL -302
8
9
;##### Configuration ###############
10
11
;    __CONFIG  _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _BOREN_OFF & _CLKOUTEN_OFF
12
    __CONFIG  _CONFIG1, _FOSC_HS & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _BOREN_OFF
13
    __CONFIG  _CONFIG2, _LVP_OFF
14
15
;###################################
16
17
;##### Init ########################
18
      org    0x00                 ;die Startadresse nach Reset ist 0, hier startet der PIC
19
      goto   main
20
21
init
22
    BANKSEL PORTC ;
23
    CLRF   PORTC ;Init PORTA
24
    BANKSEL LATC ;Data Latch
25
    CLRF   LATC ;
26
    BANKSEL ANSELC ;
27
    CLRF    ANSELC ;digital I/O
28
    BANKSEL TRISC ;
29
    MOVLW   B'00000000' 
30
    MOVWF   TRISC
31
;    BANKSEL OSCCON
32
;    BSF    OSCCON, 0 ;Internal Oscillator Block
33
;    BSF    OSCCON, 1
34
;    BSF    OSCCON, 3 ;16MHz
35
;    BSF    OSCCON, 4
36
;    BSF    OSCCON, 5
37
;    BSF    OSCCON, 6
38
;    BANKSEL OSCSTAT
39
;    BSF    OSCSTAT, 0
40
;    BCF    OSCSTAT, 1
41
;    BSF    OSCSTAT, 4
42
;    BCF    OSCSTAT, 5
43
;    BCF    OSCSTAT, 7
44
45
    return
46
47
;###################################
48
49
;##### Main ########################
50
51
main
52
      goto   init
53
54
mainloop
55
56
    BANKSEL PORTC
57
    bsf    PORTC,0  ;RC5
58
    bsf    PORTC,1 ;RC6
59
    bsf    PORTC,2  ;RC5
60
    bsf    PORTC,3  ;RC5
61
    bsf    PORTC,4  ;RC5
62
    bsf    PORTC,5  ;RC5
63
    bsf    PORTC,6  ;RC5
64
    bsf    PORTC,7  ;RC5
65
66
    GOTO mainloop
67
68
69
;###################################
70
71
    end

von Erhard (Gast)


Lesenswert?

Hallo,

nach der Startadresse 0 springst du zuerst nach main, von main zu init 
(immer diese doofe Hüpferei) und dann verläßt du init mit dem 
return-Befehl!

Wohin soll der zurückkehren; du hast kein Unterprogramm aufgerufen.

Lösche erst mal den goto main Befehl und lasse das Programm bei Init 
starten. Lösche den return und den goto init Schmarrn.

Gewöhne dir an, weniger goto-Befehle zu "verbauen", verschlechtert die 
Lesbarkeit des Programms.

Es ist schwer zu sagen, ob der PIC die 7,5V überlebt hat. Da sie ja 
recht robust sind, besteht Hoffnung.

von Daniel B. (sir_hagbard)


Lesenswert?

Super! Vielen vielen Dank!

Das "return" war natürlich der Fehler. Wie dämlich von mir.
Nun habe ich aufgeräumt im Quelltext und auch die Sprünge rausgeworfen.

Der PIC hat die Tortur überlebt und gibt nun das Gewünschte aus.

So ist das, wenn man anfängt, das Offensichtlichste übersieht man.

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.