-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: PIC - Taktversorgung

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    23.08.2007
    Ort
    Bielefeld
    Beiträge
    39

    PIC - Taktversorgung

    Anzeige

    Hallo,

    emoment bin ich dabei folgende Schaltung zu basteln:
    http://www.sprut.de/electronic/pic/p...t/lauflich.htm
    (Anstelle eines Keramikresonators nehme ich einen Quarz.)
    Kann man bei der Taktversorgung mit einem Quarz auch größere Kondensatoren verwenden als 15pF? Ich habe nur 1mikro Farad- Kondensatoren da.

    Gruß,
    Sebastian

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.10.2007
    Ort
    Bayern
    Alter
    29
    Beiträge
    116
    Nein das ist viel zu groß.

    1 µ (mikro) = 0,001 n (nano)
    1 n = 0,001 p (piko)

    Also wie du siehst ist der 1µF viel zu groß!

    mfg
    Benny
    cooming soon...

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.09.2006
    Ort
    Hamburg
    Alter
    35
    Beiträge
    988
    also getestet hab ich des mit bis zu 33pF aber da wird es schon problematisch
    Legastheniker on Bord !

    http://www.Grautier.com - Projektseite
    http://www.grautier.com/wiki/doku.php?id=bt-index - BT-BUS

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.11.2007
    Ort
    Berlin
    Beiträge
    526
    lediglich zur Richtigstellung:

    1 µF (mikro) = 1000 nF (nano)
    1 nF (nano) = 1000 pF (piko)

    Je größer die Kondensatoren an deinem Oszillator werden,
    desto länger braucht dieser zum Einzuschwingen.
    Die Obergrenze von 47pF würde ich nicht überschreiten.
    Auf einem Steckbrett lief der PIC sogar ohne die Kondensatoren,
    hier kommen die Kapazitäten der Steckkontakte positiv zum tragen.

    mfg Siro

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.10.2007
    Ort
    Bayern
    Alter
    29
    Beiträge
    116
    Ähm ja klar.

    Weiß auch nicht was ich da gestern Abend gedacht habe!

    mfg
    Benny
    cooming soon...

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    23.08.2007
    Ort
    Bielefeld
    Beiträge
    39
    Erstmal danke für eure Mühe!

    Es funktioniert alles bestens in dem oben genannten Beispiel.
    =D>

    Doch bei meiner Weiterentwicklung gibt es so einige Probleme.
    Ich verwende den PIC16F84A und habe an PortB LEDs mit Widerständen angeschlossen. An PortA.3 (Pin 2) ist ein Taster mit einem 2.7kOhm-Widerstand angeschlossen, der bei Knopfdruck zu PortA.2 (Pin 1) schließt.
    Die LEDs sollen leuchten, wenn der Taster gedrückt ist.
    Mein Quelltext:
    Code:
           list p=16f84
    
    ; Includedatei für den 16F84 einbinden
    
            #include <P16F84A.INC>
    
    ; Configuration festlegen
    ; bis 4 MHz: Power on Timer, kein Watchdog, XT-Oscillator
    
            __CONFIG        _PWRTE_ON & _WDT_OFF & _XT_OSC
    ;**************************************************************
    
    ; Variablen festlegen
    
    
    
    ;**********************************************************
    ; los gehts mit der Initialisierung
    
    Init   
    	bsf     STATUS, RP0     ; auf Bank 1 umschalten
            movlw   B'00000000'     ; PortB alle output
            movwf   TRISB
            bcf     STATUS, RP0     ; auf Bank 0 zurückschalten
            clrf    PORTB           ; alle LEDs ausschalten 
            movwf   PORTB
            BCF  TRISA,3; PortA,3 wird auf output geschaltet  
            BSF  TRISA,2 ; PortA,2 wird auf input geschaltet
            BSF  PORTA,3 ; PortA,3 wird auf high gesetzt
        
    
    ; das Folgende ist die Hauptschleife, die endlos durchlaufen wird
    Main 
            call    Tastaturbehandlung        ; Tastatur abfragen
            goto    Main2           ; keine Taste gedrückt
    Main2 
            goto    Main 
    
    Tastaturbehandlung
    	btfsc   PORTA, 2        ; ist RA2 nicht high?
    	movlw B'00000000'	;dann werden alle LEDs ausgeschaltet
        btfss   PORTA, 2        ; ist RA2 high?
    	movlw B'11111111'	;dann werden alle LEDs eingeschaltet
    	movwf PORTB
    	return
    	
            end
    Seltsamerweise gehen die LEDs schon an, wenn ich mein Experimentboard mit der Hand berühre.
    Ist da vielleicht ein Wackelkontakt drin? (Das Board ist nagelneu!)

    Gruß,
    Sebastian

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.10.2007
    Ort
    Bayern
    Alter
    29
    Beiträge
    116
    Hi,

    ich beziehe mich auf folgenden Code:
    Code:
    Init   
       bsf     STATUS, RP0     ; auf Bank 1 umschalten
            movlw   B'00000000'     ; PortB alle output
            movwf   TRISB
            bcf     STATUS, RP0     ; auf Bank 0 zurückschalten
            clrf    PORTB           ; alle LEDs ausschalten
            movwf   PORTB
            BCF  TRISA,3; PortA,3 wird auf output geschaltet 
            BSF  TRISA,2 ; PortA,2 wird auf input geschaltet
            BSF  PORTA,3 ; PortA,3 wird auf high gesetzt
    1. TRISA kann nicht beschrieben werden, da du schon vorher auf die Bank 0 zurückwechselst!

    2. Ist das Riskant wenn Du keinen Schutzwiderstand zwischen den beiden Pins verbaust, da durch einen Fehler z.B. beide RA2 + RA3 als Ausgang gesetzt und einer davon High, der andere Low und der Kurzschluss ist perfekt.

    mfg
    Benny

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    23.08.2007
    Ort
    Bielefeld
    Beiträge
    39
    Hallo,
    danke für die Antwort. Ist den folgender Code richtig?

    Code:
           list p=16f84
    
    ; Includedatei für den 16F84 einbinden
    
            #include <P16F84A.INC>
    
    ; Configuration festlegen
    ; bis 4 MHz: Power on Timer, kein Watchdog, XT-Oscillator
    
            __CONFIG        _PWRTE_ON & _WDT_OFF & _XT_OSC
    ;**************************************************************
    
    ; Variablen festlegen
    
    
    
    ;**********************************************************
    ; los gehts mit der Initialisierung
    
    Init  
    		BCF  TRISA,3; PortA,3 wird auf output geschaltet  
            BSF  TRISA,2 ; PortA,2 wird auf input geschaltet
            BSF  PORTA,3 ; PortA,3 wird auf high gesetzt
         
    	bsf     STATUS, RP0     ; auf Bank 1 umschalten
            movlw   B'00000000'     ; PortB alle output
            movwf   TRISB
            bcf     STATUS, RP0     ; auf Bank 0 zurückschalten
            clrf    PORTB           ; alle LEDs ausschalten 
            movwf   PORTB
            
    
    ; das Folgende ist die Hauptschleife, die endlos durchlaufen wird
    Main 
            call    Tastaturbehandlung        ; Tastatur abfragen
            goto    Main2           ; keine Taste gedrückt
    Main2 
            goto    Main 
    
    Tastaturbehandlung
    	bcf     STATUS, RP0     ;
    	btfsc   PORTA, 2        ; ist RA2 nicht high?
    	movlw B'00000000'	;dann werden alle LEDs ausgeschaltet
        btfss   PORTA, 2        ; ist RA2 high?
    	movlw B'11111111'	;dann werden alle LEDs eingeschaltet
    	bsf     STATUS, RP0     ; auf Bank 1 umschalten
        movwf PORTB
    	return
    	
            end 
    ;**********************************************************
    Gruß,
    Sebastian
    Edit: Ich habe einen 2,7 kOhm-Widerstand dazwischen. Es liegt wohl doch kein Wackelkontakt vor.

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.10.2007
    Ort
    Bayern
    Alter
    29
    Beiträge
    116
    Nein, da haste Du ja dass gleiche Problem. Du willst das TRISA Register beschreiben aber bist noch in Bank 0, das TRISA Register ist aber auf Bank1.

    Code:
    Init:
    bsf	STATUS,RP0
    movlw   B'00000100'	; 2 auf Eingang
    movwf	TRISA
    movlw	B'00000000'	; alle auf Ausgang
    movwf	TRISB
    bcf	STATUS,RP0
    
    clrf	PORTB;		; alle LEDs aus
    bsf	PORTA,3		; High an RA3
    Was das soll kapier ich nicht:
    Code:
    ; das Folgende ist die Hauptschleife, die endlos durchlaufen wird
    Main
            call    Tastaturbehandlung        ; Tastatur abfragen
            goto    Main2           ; keine Taste gedrückt
    Main2
            goto    Main
    Warum nicht einfach:
    Code:
    ; das Folgende ist die Hauptschleife, die endlos durchlaufen wird
    Main
            call    Tastaturbehandlung        ; Tastatur abfragen
            goto    Main           ; keine Taste gedrückt
    mfg
    Benny

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    23.08.2007
    Ort
    Bielefeld
    Beiträge
    39
    Hallo,

    es hat den gleichen Effekt wie mein erstes Skript.

    Gruß,
    Sebastian

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •