Zum neuen Informatik-Forum >>
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Flankensteuerung? -->PIC aufwecken via Flanke am Eingang

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Assembler
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Feuerreiter



Anmeldungsdatum: 21.06.2006
Beiträge: 5

BeitragVerfasst am: 21. Jun 2006 19:06    Titel: Flankensteuerung? -->PIC aufwecken via Flanke am Eingang Antworten mit Zitat

Hallo Programmierer,
vorerst folgendes:
Ich hoffe, daß ich hier richtig bin. Ansonsten würde es mir schon vollkommen reichen, wenn ihr mir einen Link zu einer passenderen Seite geben könntet.

Ich bin absolut neu in Assembler Programmierung und habe leider auch keine Ahnung. Mein aktueller Stand bis jetzt:
Ich habe die Brennplatine von Vellemann und kann mit dieser auch brennen.
Als PIC habe ich den 8-beinigen 12f675 in meiner Platine. Die Platine hat auch eine kleine Testfunktion mit folgender Belegung:

Pin2/ GP5: Eingang über einen Taster; High Active (also an Masse, wenn Schalter nicht betätigt)
Pin3/ GP4: Ausgang 2 (via LED und R nach Masse)
Pin4/ GP3: Reset
Pin5/ GP2: Ausgang 1 (via LED und R nach Masse)
Pin 6: an 4 MHz Quartz

Der eine Eingang und die zwei Ausgänge reichen für meine Anforderung.

Weiterhin habe ich MPLab IDE 7.4 und habe dort die Standard- Datei für den 12f675 geladen. (siehe Attachment, sollte es nötig sein) und ich habe die Seite Spruts Pic- Page "durchaus studiert mit heißem Bemühen."

Jetzt noch zu den Pflichten des PICs:
Zum besseren Verständnis erstmal die Erklärung:
Ich benötige ein Alarmanlage für ein Motorrad. Aktiviert wird sie über einen Erschütterungssensor (- taster).
Der Einschaltvorgang erfolgt über das Ausschalten der Zündung. Daher möchte ich nicht, nachdem ich den Schlüssel aus dem Schloß gezogen habe, daß die Alarmanlage gleich losheult. Die Alarmanlage soll sich erst aktivieren, nachdem das Motorrad 10 sek. ruhig gestanden hat. Das Einschalten des Motorrads (Zündung an) entzieht dem Pic die Versorgungsspannung. Die Stellung des Erschütterungssensors soll keine Auswirkung auf ein Auslösen der Alarmanlage haben, einzig der Wechsel des Zustandes soll den Alarm auslösen.

Jetzt noch mal etwas detailierter:
Vorgang 1: Realisiert werden soll also eine Alarmanlage, die bei einer positiven Flanke an GP5 den Ausgang 1 (GP2) für 10 sek auf 1 setzt und nach der letzten positiven Flanke wieder löscht. Innerhalb der 10 sek soll also eine erneute Flanke den Counter wieder auf 0 setzen und es soll von vorn gezählt werden (also ein astabiles getriggertes Monoflop, bzw. eine getriggerte Ausschaltverzögerung) Wichtig ist die Flankensteuerung, irrelevant vom Status des GP5(siehe oben)

Vorgang2: Vorgang 1 soll erst gestartet werden, nachdem GP5 für 10 sek nach Einschalten des Pics keine positive Flanke mehr erhält. Also auch dieser Vorgang getriggert und unabhängig vom aktuellen Status des GP5 (es soll also irrelevant sein, ob die endgültige Position des GP5 bei Beendigung des 2. Vorgangs auf 0 oder 1 stehen bleibt.


Für alle, die bis hierhin gelesen haben: Schon mal vielen Dank für Eure Geduld.

Jetzt zu meinen Problemen:

1. Das Definieren des GP5 als Ausgang, so richtig?:
clrf GPIO ; aus!
movlw 0x07
movwf CMCON ; alle Pins digital (nicht Comp)
bsf STATUS, RP0 ; Bank 1
MOVLW B'1' ; nur GP5 als Ausgang
MOVWF TRISIO
bcf STATUS, RP0 ; Bank0

2. Die Flankensteurung: Wie funktioniert denn das überhaupt bei Pics? Werden die generell flankengesteurt? Muß ich das festlegen? Wie lege ich das fest?
3. Interrupt: Ich dachte mir, daß es nach Beendigung des Vorgangs2 (Motorrad steht in Ruhe, Alarmanlage soll sich Aktivieren, allerdings nicht auslösen) am besten wäre, das der PIC in den Schlafmodus geht und durch eine Flanke an GP5 geweckt wird und danach wieder in den Sleep Modus fällt.
Ich habe leider keine Ahnung, wie ich das machen soll. Mir fehlt insbesondere der Befehl, der den Pic aufweckt.

So, viel Text und wenig dahinter, hoffe ich. Ich bin für jede Hilfe mehr als dankbar, auch wenn es nur Teillösungen sind. Solltet Ihr Fragen haben, schreibt einfach. Freundliche Grüße aus Dresden


Sebastian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TMSearcher



Anmeldungsdatum: 19.05.2005
Beiträge: 270
Wohnort: Bremen

BeitragVerfasst am: 22. Jun 2006 20:01    Titel: Antworten mit Zitat

Hi,
ich habe zwar nicht ganz verstanden was der Zweck deiner Schaltung sein soll, aber egal...

Also beim durchsehen deines Codes ist mir folgendes aufgefallen:
Zitat:
Pin 6: an 4 MHz Quartz

dein Config-word
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT

du nutzt damit den internen RC-Oszillator.

Dann:
Pin2/ GP5: Eingang über einen Taster; High Active (also an Masse, wenn Schalter nicht betätigt)

MOVLW B'1' ; nur GP5 als Ausgang
MOVWF TRISIO

http://www.informatikerboard.de/files/triso_147.gif

B'1' ist bei mir 0000 0001, das heißt das heißt GP5-GP1 als Output, GP0 als Input.

Zitat:
Pin2/ GP5: Eingang über einen Taster; High Active (also an Masse, wenn Schalter nicht betätigt)


? grübelnd ?

Zitat:
3. Interrupt: Ich dachte mir, daß es nach Beendigung des Vorgangs2 (Motorrad steht in Ruhe, Alarmanlage soll sich Aktivieren, allerdings nicht auslösen) am besten wäre, das der PIC in den Schlafmodus geht und durch eine Flanke an GP5 geweckt wird und danach wieder in den Sleep Modus fällt.


Warum? Der Stromverbrauch ist doch eh fast Null. Kannst ja mal ausrechnen wie lange der PIC braucht deine Batterie zu entleeren Big Laugh

Versuch mal genau zu beschreiben was die Schaltung können soll und vielleicht eine Skizze der Schaltung selbst.

Dann macht man am besten einen Flow-Chart oder ähnliches um den Programmablauf zu strukturieren.

Dann coded man den PIC und wundert sich warum nix geht.

Dann geht’s an die Fehlersuche Big Laugh


So, Sleep-Mode:

Auszug aus dem Manual:

The SLEEP mode is designed to offer a very low
current Power-down mode. The user can wake-up from
SLEEP through:
• External RESET
• Watchdog Timer wake-up
An interrupt

3.2 Additional Pin Functions
Every GPIO pin on the PIC12F629/675 has an
interrupt-on-change option and every GPIO pin, except
GP3, has a weak pull-up option. The next two sections
describe these functions.

http://www.informatikerboard.de/files/ioc_139.gif
Alles klar?

Gruß
TMS

_________________
Intelligent life is so very rare,
the rarest thing in creation
and the most precious
This is Earth Calling..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Feuerreiter



Anmeldungsdatum: 21.06.2006
Beiträge: 5

BeitragVerfasst am: 23. Jun 2006 09:57    Titel: Eingang/Ausgang addressieren Antworten mit Zitat

Hallo Ihrs,
vielen Dank für Eure schnelle Antwort. Habt mir die richtigen Denkanstöße gegeben.

Um die Sache also jetzt zu vereinfachen habe ich mal ein Petri Netz meines Problems angehangen (siehe Attachment) und was soll ich sagen: Dadurch erledigt sich das Problem der Flankensteuerung. Ich muß jetzt nur noch auslesen können, welchen Zustand x gerade einnimmt. Weiterhin reicht es mir auch aus, im Zustand P3 den PIC in einer Endlosschleife verharren zu lassen und dabei kontinuirlich den Wert von X abzufragen (dadurch entfällt die Sleep/Interrupt Kombination)

Zur Frage des externen Clockers: In der Tesplatine hängt der PIC an einem 4MHz Quartz, in der späteren Platine soll er sich aus Einfachheit aber selbst takten, deswegen greife ich gleich auf den internen Takt zu. Ich hoffe, daß der PIC sich von dem externen Takt der Testplatine nicht stören läßt?

Und noch einige Fragen:
ganz kurz nochmal die Hintergründe:
x=GP5
y=GP2

kann ich mir die Variablen über

x equ ....; Ausgang/Eingang GP5 x zuweisen
y equ ....; Ausgang/Eingang GP2 y zuweisen
so definieren, daß ich im späteren Code z.Bsp: nur noch sagen muß:

P3a
BTFSC x ;x=1?
GOTO P4a
GOTO P3a ;das wäre Quasi jetzt meine Sleep Funktion

P4a
BSF y ;y auf 1 setzen
...

Wenn ja, wie geht das?

Zweitens: Offensichtlich habe ich ja das Output Sezten nicht hinbekommen.
Wenn nur GP5 als Input daliegt: ist das dann B'10000' ?

Vielen Dank und ich melde mich bestimmt noch mal, da ich doch mit Sicherheit die Zählschleifen nicht hinbekommen werde.


Grüße aus Dresden

Sebastian Hetzel
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Feuerreiter



Anmeldungsdatum: 21.06.2006
Beiträge: 5

BeitragVerfasst am: 26. Jun 2006 12:42    Titel: Lampe soll angehen, wenn Taster gedrückt und wieder aus Antworten mit Zitat

...wenn Taster wieder losgelassen :-)

Hallo Ihrs,
offensichtlich war das vorherige Problem zu umfangreich, deswegen mal der Code. Zur Übersichtlichkeit habe ich ihn auch noch einmal angehangen. Das untere Beispiel soll jetzt also nur eine LED anmachen; GPO4 auf 1 setzen, wenn ein Taster an GPO5 eine 1 gibt und wieder aus, wenn der Taster auf 0 liegt.


; This file is a basic code template for assembly code generation *
; on the PICmicro PIC12F675. This file contains the basic code *
; building blocks to build upon. *
; *
; If interrupts are not used all code presented between the ORG *
; 0x004 directive and the label main can be removed. In addition *
; the variable assignments for 'w_temp' and 'status_temp' can *
; be removed. If the internal RC oscillator is not implemented *
; then the first four instructions following the label 'main' can *
; be removed. *
; *
; Refer to the MPASM User's Guide for additional information on *
; features of the assembler (Document DS33014). *
; *
; Refer to the respective PICmicro data sheet for additional *
; information on the instruction set. *
; *
;**********************************************************************
; *
; Filename: sequenz.asm *
; Date: 15.06.2006 *
; File Version: 1.0 *
; *
; Author: Sebastian Hetzel *
; Company: privat *
; *
; *
;**********************************************************************
; *
; Files required: p12f685.inc *
; *
; *
; *
;**********************************************************************
; *
; Notes: *
; *
; *
; *
; *
;**********************************************************************

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

errorlevel -302 ; suppress message 302 from list file

__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT

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




;***** VARIABLE DEFINITIONS
w_temp EQU 0x20 ; variable used for context saving
status_temp EQU 0x21 ; variable used for context saving






;**********************************************************************
ORG 0x000 ; processor reset vector
goto main ; go to beginning of program


ORG 0x004 ; interrupt vector location
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register


; isr code can go here or be located as a call subroutine elsewhere


movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt


; these first 4 instructions are not required if the internal oscillator is not used
main
call 0x3FF ; retrieve factory calibration value
bsf STATUS,RP0 ; set file register bank to 1
movwf OSCCAL ; update register with factory cal value
bcf STATUS,RP0 ; set file register bank to 0
bcf INTCON, GIE ; Interrupt aus

; mein Code
; IO-Pins definieren
clrf GPIO ; aus!
movlw 0x07
movwf CMCON ; alle Pins digital (nicht Comp)
bsf STATUS, RP0 ; Bank 1
MOVLW B'10000'
MOVWF TRISIO
bcf STATUS, RP0 ; Bank0



btfss GPIO,5 ;wenn y gesetzt, dann zu P2a, sonst zu P2b
goto P2a
goto P2b
P2a
btfss GPIO,5 ; wenn y weiterhin gesetzt, dann in Schleife bleiben
goto P2b ;sonst zu P2b wechseln
bsf GPIO,4 ;setzt GP4
goto P2a
P2b
btfsc GPIO,5 ;
goto P2a
bcf GPIO,4
goto P2b
;Ende mein Code
; initialize eeprom locations

ORG 0x2100
DE 0x00, 0x01, 0x02, 0x03


END ; directive 'end of program'


So, diesen Code habe ich jetzt also so in mein PIC geschrieben und es passiert folgendes:
Wenn der PIC startet, ist die LED aus. Wenn ich den Taster betätige, passiert nichts. Wenn ich den Taster mehrmals hintereinander betätige, fängt die LED auf einmal an zu leuchten. Leider ohne erkennbare Ordnung. Manchmal leuchtet sie auch nicht, manchmal leuchtet sie so ca. 2 sek. nach.

Meine Fragen: Was fehlt am obigen Code, bzw. ist falsch?
Vielen Dank für Eure Hilfe und wie immer freundliche Grüße aus DD

Sebastian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TMSearcher



Anmeldungsdatum: 19.05.2005
Beiträge: 270
Wohnort: Bremen

BeitragVerfasst am: 26. Jun 2006 19:21    Titel: Antworten mit Zitat

Hi,
wie eilig ist es?
Bin im Moment etwas im Stress (wie viele andere wohl auch). Werde den Code aber mal durchsehen. Die PIC’s sind leider manchmal tückisch Augenzwinkern
Gruß TMS

_________________
Intelligent life is so very rare,
the rarest thing in creation
and the most precious
This is Earth Calling..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Feuerreiter



Anmeldungsdatum: 21.06.2006
Beiträge: 5

BeitragVerfasst am: 27. Jun 2006 00:29    Titel: Antworten mit Zitat

...hallo Ihrs,
hat natürlich Zeit :-)
vielen Dank für Eure Hilfe, Gruß aus DD,

Sebastian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Assembler Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen