mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC 12F508 Projekt


Autor: Florian K. (kraemer90)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich will ein kleines PIC-Projekt in Assembler beginnen.

Als PIC verwende ich einen 12F508.

Betriebsspannung sind 3 Knopfzellen mit jeweils 1,4V und 650mAh, also 
4,2V.

Folgende Funktionen sollten realisiert werden:


Wenn ein Schalter (Reedkontakt) geschlossen wird, soll für 2min30s 4 
rote LEDs leuchten.
Nach den 2min30s sollen 4 grüne LEDs leuchten, bis der Schalter wieder
geöffnet wird. (Wenn möglich sollen die LEDs getaktet werden, damit die 
Knopfzellen länger halten.)


Außerdem soll der PIC in Standbye-Betrieb gehen wenn er nicht gebraucht 
wird.


Habe mal eine PAP gemacht. Kann dass so gehen oder sollte ich anders 
vorgehen?

PS: Werte im Schaltplan stimmen nicht mehr, geht nur um die Schaltung an 
sich

Autor: Florian K. (kraemer90)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so habe jetzt schon mein erstes Problem, wollte mal schnell mit einer 
Zeitschleife die LEDs mit einem Blinklicht testen, es stimmt aber vorne 
und hinten nicht.


    list      p=12F508            ; list directive to define processor
    #include <p12F508.inc>        ; processor specific variable definitions

    __CONFIG   _MCLRE_OFF & _CP_OFF & _WDT_OFF & _IntRC_OSC

; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file. 
; See respective data sheet for additional information on configuration word.




;***** VARIABLE DEFINITIONS
TEMP_VAR    UDATA
sGPIO    res 1
cn1      res 1
cn2      res 1
cn3      res 1


;**********************************************************************
RESET_VECTOR    CODE   0x1FF      ; processor reset vector

; Internal RC calibration value is placed at location 0x1FF by Microchip
; as a movlw k, where the k is a literal value.
    
MAIN    CODE    0x000
    movwf   OSCCAL            ; update register with factory cal value 

;Initialisierung
start   
  movlw  b'00000000'      ;OPTION-Register konfigurieren, damit TRIS nicht überschrieben
  OPTION            ;wird.
  movlw  b'11111001'      ;GP1,GP2 = Ausgänge.
  Tris  GPIO
  clrf  sGPIO
;Main

flash
  movf  sGPIO,w
  xorlw  b'00000110'  
  movwf  GPIO
  movwf  sGPIO

;warten

  clrf  cn1
  clrf  cn2
  movlw  .23
  movwf  cn3

w1
  nop            ;1 Cycle
  nop            ;1 Cycle
  decfsz  cn1,f      ;1 Cycle  
  goto   w1        ;2 Cycle
              ;(256*5)=1280

  nop            ;1 Cycle
  nop            ;1 Cycle
  decfsz  cn2,f      ;1 Cycle  
  goto   w1        ;2 Cycle
              ;1280*(*256*5)=1638400
  
  nop            ;1 Cycle
  decfsz  cn3,f      ;1 Cycle
  goto  w1        ;2 Cycle
              ;1634800*(4*23)=150732800µs=150,73s=2,5min
  goto flash    
  

    END                       ; directive 'end of program'

die LEDs leuchten nur 8sec statt 2,5min. Als Quarz wird das interne mit 
4Mhz verwendet

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>               ;1280*(*256*5)=1638400
>               ;1634800*(4*23)=150732800µs=150,73s=2,5min

Überleg doch mal was an diesen Timing Berechnunegn falsch sein könnte.

>               ;(256*5)=1280

Die ist richtig, zu dazu kommen noch die 5 Takte aus der zweiten
Schleife also 1280+5 und das mal 256 Durchläufe ergibt 328960 plus
nochmal 4 für die letzte Schleife und das mal 23 sind summa sumarum
7566172 ergibt bei 4MHz Takt eine Zeit von 7,566 Sekunden.

Passt also ganz Genua.

Autor: kraemer90 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Will jetzt einen SMD-PIC programmieren. Kann es sein dass ich da nur 5 
Pins brauche?


GP0 = ICSPDAT  Datapin
GP1 = ICSPCLK  Clockpin
GP3 = VPP  Voltage Input

und halt Vdd und Vss

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, du brauchst 5 Pins:
Vpp (~12V)
V+ (~5V)
GND
Data
Clock

~ = ungefähr

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum programmieren und auch sonst viel zu PICs: sprut.de

Autor: Florian K. (kraemer90)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so, habe jetzt dass nächste Problem:

Ich will eig. den GP0 als Eingang verwenden. Doch er erkennt High nur, 
wenn ich ihn auf VDD direkt anschließe. Den Schalter mit dem 
Pullup-Widerstand bekommt er nicht auf die Reihe.

Das komische jetzt jedoch ist, dass wenn ich den GP4 als Eingang 
verwende, dieser optimal funktioniert mit dem Schalter und Pullup.

Ist dass immer so, oder muss ich den GP0 noch anders konfigurieren?

Auszug aus dem Programm:
 start   
  movlw  b'00000000'      ;OPTION-Register konfigurieren, damit TRIS nicht überschrieben
  OPTION            ;wird.
  movlw  b'11111001'      ;GP1,GP2 = Ausgänge.
  Tris  GPIO

  clrf  wait1
  clrf  wait2
  clrf  wait3
  clrf  wait4
  clrf  GPIO
  movlw  .2
  movwf  wait4

;Main
Abfrage  

  btfss  GPIO,0
  goto   Abfrage
  movlw  b'00000010'
  movwf  GPIO 

Autor: Florian K. (kraemer90)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so habe den Fehler jetzt gefunden. Habe mal mit dem Multimeter 
nachgemessen und gesehen, dass in der jetzigen Schaltung GP0 die 
Spannung gegen 0 zieht. Habe nun einfach statt dem Pullup einen Pulldown 
aufgesteckt und schon geht es :)

Autor: Florian K. (kraemer90)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So bin habe jetzt mal schnell einen Programmer geroutet, müsste so 
funktionieren laut Sprut und Datenblatt oder?

GND ist so verlegt, damit die Datenleitung von der Clockleitung 
abgeschirmt ist.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.