-
        

Ergebnis 1 bis 6 von 6

Thema: Wieder mal der 16F88 ...

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2007
    Beiträge
    24

    Wieder mal der 16F88 ...

    Anzeige

    Hy,
    wer hier ein bischen aufmerksam gelesen hat wird feststellen, dass ich mich schon seit einigen Tagen mit dem 16f88er rumplage und einfahc nicht weiterkommen. Da mir (bis jetzt) keine so wirklich geantwortet hat (in dem anderen Thread) hab ich jetzt mal versucht von Unten heran zu gehen, sprich, ersteinmal ein simples Lauflicht zu programmieren. Das hat eigentlich auch ganz gut geklappt; dann wollte ich den AD-Wandler programmieren und das Ergebniss über 8 LEDs (RB<0:7>) ausgeben. Dazu hab ich erstmal folgenden Code geschrieben (um zu testen, ob er mir überhaupt eine Variable über die LEDs ausgibt).
    Code:
    list p=16f88
     	__config 	_CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _WDT_OFF & _LVP_OFF & _INTRC_IO & _MCLR_OFF & _BODEN_OFF & _PWRTE_ON
    	__config   _CONFIG2, _IESO_OFF & _FCMEN_OFF
    
    #include p16f88.inc
    
    var equ 0x20
    
    	org 0x00
    	goto _main
    	
    	org 0x04
    	goto _main
    
    _main
    		
    	;2Mhz
    	banksel OSCTUNE
    	clrf OSCTUNE
    	banksel OSCCON
    	movlw B'00001110'
    	movwf OSCCON
    
    	;alle als DIgiatle I/O
    	banksel ANSEL
    	movwf 0x00
    	movlw ANSEL	
    
    	; alle RBs als Out
    	banksel TRISB
    	clrf TRISB
    
    	
    	banksel var
    	movlw B'11111111'
    	movwf var
    
    	call _set_bin
    
    ;Endlosschleife
    _l
    	nop
    	goto _l
    
    ;setzten jeder einzelnen LED auf an (1 in var) oder aus(0 in var)
    _set_bin
    	btfsc var, 0
    	bsf PORTB, 0
    	btfss var, 0
    	bcf PORTB, 0
    	
    	btfsc var, 1
    	bsf PORTB, 1
    	btfss var, 1
    	bcf PORTB, 1
    
    	btfsc var,2
    	bsf PORTB, 2
    	btfss var, 2
    	bcf PORTB, 2
    
    	btfsc var, 3
    	bsf PORTB, 3
    	btfss var, 3
    	bcf PORTB, 3
    
    	btfsc var, 4
    	bsf PORTB, 4
    	btfss var, 4
    	bcf PORTB, 4
    
    	btfsc var, 5
    	bsf PORTB, 5
    	btfss var, 5
    	bcf PORTB, 5
    	
    	btfsc var, 6
    	bsf PORTB, 6
    	btfss var, 6
    	bcf PORTB, 6
    
    	btfsc var, 7
    	bsf PORTB, 7
    	btfss var, 7
    	bcf PORTB, 7
      return
    	
    
    	return
    
    end
    So der Code ist ja eigentlich ganz Simpel. Blos ist das Ergebnis unbefriedigend. Und zwar "aktiviert" er alle LEDs bis auf Nr. 6 .Die bleibt bei diesem Programmablauf aus. Aber wenn ich "bsf PORTB, 6" expliziet aufrufe, dann geht sie an.
    Deshalb denk ich, dass ich bei der Intialisierung etwas vergsse, oder falsch mache.
    Ich versteh diesen Kontroller einfach nicht.
    Ich hoffe es findet sich jemand der ihn shcon einmal erfolgreich programmiert hat, da ich ihn eigentlich wirklich super finde (preisgünstig, ADW, 4k, SSP, I²C, USART ...) und nun auch 3 Stück davon zuhause habe. Leider scheint er nicht alzu verbreitet zu sein, da ich auch keinen guten beispielcode dazu bis jetzt gefunden habe.
    Vlt kennt jemand ja einen bzw. kann mir einen von sich schicken
    liebe Grüße Kante

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.11.2007
    Alter
    33
    Beiträge
    140
    Servus,

    schau doch einfach mal hier:

    http://www.winpicprog.co.uk/pic_tutorial.htm Mit dem Tutorial habe ich auch angefangen. Dazu habe ich die einzelnen Programme für meinen Controller umgeschrieben.

    Änder die Config, die Include-Datei und achte auf die Ports. Dann sollte das funktionieren!
    In Tutorial 11 ist wunderbar erklärt, wie man die ADC Geschichte angeht!

    Gruß

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2007
    Beiträge
    24
    Hy,
    vielen Dank für den Link. Ich werd ihn mir mal anschauen.
    Mein Problem ist ja nicht genereller Natur. Hab ja schon einiges mit dem 16f28a auf die Beine gestellt, bekomme das selbe halt blos nicht auf dem 16f88 hin. Deswegen Suche ich ja jemanden, der auch den 88er benutzt.
    Welchen Controller benutzt du den?
    liebe Grüße Kante

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

    ich würde dir Empfehlen MCLR nicht als I/O zu verwenden wenn man den Pin nicht unbedingt benötigt und lieber ihn als Reseteingang beläst, sonst könntest Du Probleme bekommen wenn Du ihn wieder Programmieren willst wenn das dein Brenner nicht unterstützt.

    Im OSCON Register legst Du mit Bit6:4 die Frequenz des int. Oszilators fest. So wie Du hier alle 3 auf 0 hast, läuft er mit 31,5 kHz.
    Bit 3 kann man nur lesen und nicht setzen. Gibt einen Hinweis wenns es mim Takt ein Problem gab, aber näheres im Datenblatt (genau kann ich mich nicht mehr erinnern was das im Detail angibt / macht)


    Probier doch mal aus was passiert wenn Du den Code direkt in die Endlosschleife haust, also so:

    Code:
    btfsc var, 0
       bsf PORTB, 0
       btfss var, 0
       bcf PORTB, 0
       
       btfsc var, 1
       bsf PORTB, 1
       btfss var, 1
       bcf PORTB, 1
    
       btfsc var,2
       bsf PORTB, 2
       btfss var, 2
       bcf PORTB, 2
    
       btfsc var, 3
       bsf PORTB, 3
       btfss var, 3
       bcf PORTB, 3
    
       btfsc var, 4
       bsf PORTB, 4
       btfss var, 4
       bcf PORTB, 4
    
       btfsc var, 5
       bsf PORTB, 5
       btfss var, 5
       bcf PORTB, 5
       
       btfsc var, 6
       bsf PORTB, 6
       btfss var, 6
       bcf PORTB, 6
    
       btfsc var, 7
       bsf PORTB, 7
       btfss var, 7
       bcf PORTB, 7

    mfg
    Benny

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2007
    Beiträge
    24
    Hey auch dir danke.
    hab meinen Fehler (wenigstens in diesem Code) mitlerweile schon gefunden. Müsste eigentlich jedem aufmerksamen leser aufgefallen sein (ich bin gemein ich weis).
    Lag an der Zeile "movlw ANSEL". Ist natürlich klar das das nicht funktionieren kann. Muss "movwf ANSEL" heißen.
    Nun werd ich Bottem-up programmieren und hoffen den Controller irgendwann "im Griff" zu haben.
    Deinen Hinweis zum MCLR hab ich nicht ganz verstanden. Hatte bisher aber auch noch keine Probleme damit (benutze Brenner5 von sprut).
    Die Taktfrequenz sollte bei 31,5 MHz liegen, damit ich (als ich die LEDs noch blinken ließ) auch was sehe (und nicht nur ein flimmern)
    Gute Nacht Kante

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

    ohh stimmt bei sehr genauem lesen wäre mir das auch aufgefallen

    Das steht im DB zu den Oszillatoreinstellungen:
    bit 6-4 IRCF<2:0>: Internal RC Oscillator Frequency Select bits
    000 = 31.25 kHz
    001 = 125 kHz
    010 = 250 kHz
    011 = 500 kHz
    100 = 1 MHz
    101 = 2 MHz
    110 = 4 MHz
    111 = 8 MHz
    D.h. das dein PIC mit 31,25 kHz läuft.

    Bei einem normalen Programmiervorgang wird die Betriebsspannung angelegt, der PIC fängt dann an das Programm abzuarbeiten, dann kommt ein Reset damit der Programmzähler bei 0x00 anfängt, dann kommen die Programmierdaten.
    Wenn MCLR als Reseteingang deaktiviert wurde kann es möglich sein das dieser Reset vorm Programmieren nicht erfolgt, d.h. der Programmcode der bei der Adresse 0x00 stehen sollte steht jetzt auf 0x20 oder iwo anders. Das meinte ich.

    mfg
    Benny
    cooming soon...

Berechtigungen

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