Första försöket med wisp648 och 16f648

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Första försöket med wisp648 och 16f648

Inlägg av Bosen »

Ja.. jag har enligt vad xwisp2w säger fått laddat över koden till en 16f648.
Koden är en blink a led kod.
Problemet är att jag inte riktigt har fattat hur jag skall göra uppkopplingen av min 16f648 för att jag skall kunna testa programmet!
pullup på mclr?
annat jag bör tänka på??
kan någon snabbt visa ett chema på hur jag bör koppla upp kretsen???
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

I princip behövs det inte mer än vad som behövs för att kunna
programmera kretsen. Om xwisp2w sa att programmeringen gick bra,
så ska åprogrammet också kunna köras direkt.

I alla fall om du valde intern oscillator. Annars så kan det behövas
en kristall och ett par kondingar, men det blir rena spekulationer eftersom
vi inte har en aning just nu hur din kod såg ut...

Om då låter Wisp648'an vara ansluten så ser den till att MCLR har
rätt nivå för att köra programmet. Annars (om du kopplar bort den)
så ska den anslutas till 5V genom att motstånd (så som kapitlet
om reset i databladet beskriver).

Om du har valt att ha LVP påslaget i din CONFIG (vilket snarast är
att betrakta som ett programeringsfel), så måste pinnen (PGM) vara
kopplat till GND (gärna genom ett motstånd).

För ett du även ska *se* att det körs, så behövs det naturligstvis
en LED och ett motstånd... :-)
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Inlägg av Bosen »

hehe... jo led och motstånd behövs givetvis....
Ja, men då är det som jag trodde det skall va... då måste jag börja kolla närmare på koden istället.... tack sodjan!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

För att blinka en LED så kan det inte vara så mycket.
Varför inte posta den ?
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Inlägg av AndersG »

Ja, men då är det som jag trodde det skall va... då måste jag börja kolla närmare på koden istället.... tack sodjan!
Säger samma. Posta koden här. Du kan även gå in på Microchips hemsida och ladda ned PICKIt2 lessons som har exempel bla på det.
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Inlägg av Bosen »

nja... det behövs inte... jag hadde inte skrivit koden själv... jag upptäckte av en ren slump att programmet funkade efter att jag hadde brutit strömmen en gång. Så nu ska jag ge mig på att skriva en egen kod :D
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Inlägg av Bosen »

Sodjan:
Jag försökte kompilera din blinkaled-kod som du har på din sida rätt av. men jag får detta felmeddelande när jag försöker köra den i mpsim:

Kod: Markera allt

CORE-E0002: Stack under flow error occurred from instruction at 0x000000
vad tror du det beror på??
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Jag försökte kompilera din blinkaled-kod som du har på din sida...

Länk tack. Så att jag vet vad du syftar på...
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Inlägg av Bosen »

Här!
den koden i den högra spalten!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Aha, OK. *den* koden...

Det är främst för att visa på skillnaderna mellan abs och reloc kod.
Jag har inte kollar att den är 100% korrekt för övrigt.
Jag tror inte att den fungerar rakt av med senare versioner av MPLAB.

Prova denna istället :

Kod: Markera allt

;**********************************************************************
;   Enkelt blink-a-led, 16F628A.                                       *
;                                                                     *
;**********************************************************************
;    Files required:  P16F628A.INC                                     *
;                     16F628A.LNK                                      *
;                                                                     *
;**********************************************************************

  list      p=16f628A
  #include <p16f628A.inc>
	
  __CONFIG   _DATA_CP_OFF & _CP_ON & _LVP_OFF & _BODEN_OFF & _BOREN_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _MCLRE_ON

RESET_VECTOR    CODE    0x000     ; processor reset vector
  goto    start             ; go to beginning of program


INT_VECTOR      CODE    0x004     ; interrupt vector location
  goto    isr_routine       ; goto main interrupt service routine.
        

;***************************************************************
MAIN    CODE

start

  banksel cmcon
  movlw   h'07'
  movwf   cmcon            ; Stäng av ADC.

  banksel trisa
  clrf    trisa
  clrf    trisb             ; Alla pinnar = utgångar.

  banksel t1con
  movlw   b'00110001'
  movwf   t1con             ; Se datablad...
        
  banksel pie1
  movlw   b'00000001'
  movwf   pie1              ; Enable avbrott från TMR1.

  banksel intcon	
  bsf     intcon, peie
  bsf     intcon, gie       ; Enable avbrott...

loop
  goto loop                 ; Vänta på avbrott...
 


;***************************************************************
ISR_ROUTINE  CODE

isr_routine

  banksel porta
  comf    porta            ; Blinka med hela PORTA!

  banksel pir1
  bcf     pir1, tmr1if     ; återställ avbrotts flagga.

  retfie

  end
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Inlägg av Bosen »

jag försöker ta mig vidare... tänkte försöka kolla om en pinne är hög eller låg.
För att få pinnen hög eller låg tänkte jag använda mig av en vanlig tryckknapp. Hur bör jag koppla den?? ska jag hålla pinnen hög genom ett motstånd och sedan när jag trycker på knappen sätta pinnen direkt mot "jord" eller hur bör man göra... vad bör det va för värden på motstånden?!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> ska jag hålla pinnen hög genom ett motstånd och sedan när jag trycker på knappen sätta pinnen direkt mot "jord"

Ja, eller tvärtom. Beror på om du vill ha 1 eller 0 när ingen trycker...

> vad bör det va för värden på motstånden?!

Inte kritiskt. Allt mellan 10K och 1M lär fungera.

Kom också ihåg att alla knappar studsar en hel del. Kan vara
viktigt beroende på vad din kod gör...
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Inlägg av Bosen »

tvärt om... hur menar du då?? att håll den låg genom ett motstånd och genom knappen sätta pinnen mot 5v+??? eller skall motståndet alltid vara på + sidan???

detta är koden jag tänkte köra:

Kod: Markera allt

;**********************************************************************
;   This file is a basic code template for object module code         *
;   generation on the PIC16F648A. This file contains the              *
;   basic code building blocks to build upon.                         *
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler and linker (Document DS33014).          *
;                                                                     *
;   Refer to the respective PIC data sheet for additional             *
;   information on the instruction set.                               *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename:      xxx.asm                                           *
;    Date:                                                            *
;    File Version:                                                    *
;                                                                     *
;    Author:                                                          *
;    Company:                                                         *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files required: P16F648A.INC                                     *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes:                                                           *
;                                                                     *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************

    list      p=16F648A           ; list directive to define processor
    #include <p16F648A.inc>       ; processor specific variable definitions

    errorlevel  -302              ; suppress message 302 from list file


    __CONFIG   _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_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 (examples)

; example of using Shared Uninitialized Data Section
INT_VAR     UDATA_SHR     
w_temp      RES     1       ; variable used for context saving 
status_temp RES     1       ; variable used for context saving
pclath_temp RES     1       ; variable used for context saving
delay_var	RES		1		; variable used for delay counter
;**********************************************************************
RESET_VECTOR    CODE    0x0000    ; processor reset vector
        goto    start             ; go to beginning of program


INT_VECTOR      CODE    0x0004    ; interrupt vector location

INTERRUPT

        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
        movf    PCLATH,w          ; move pclath register into W register
        movwf   pclath_temp       ; save off contents of PCLATH register


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


        movf    pclath_temp,w     ; retrieve copy of PCLATH register
        movwf   PCLATH            ; restore pre-isr PCLATH register contents
        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

MAIN_PROG       CODE

start
; remaining code goes here

		banksel	trisb
		clrf	trisb
		banksel trisa
		clrf	trisa
		bsf 	trisa, 0
		banksel portb
test		
		movlw	b'01010101'
		movwf	portb
test1        
		btfss 	porta, 0
		goto 	test1       ; loop forever, remove this instruction, for test only
        movlw	b'10101010'
		movwf	portb
test2
		btfsc	porta, 0
		goto	test2
		goto	test


; initialize eeprom locations

EE      CODE    0x2100
        DE  0x00, 0x01, 0x02, 0x03

        END                       ; directive 'end of program'

sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> att håll den låg genom ett motstånd och genom knappen sätta pinnen mot 5v+?

Exakt !
Men det är vanligare att ha en pullup och switch till GND.
Om du använder en PIC som har inbyggda "weak pullup" på några
pinnar så kan du spara in det externa motståndet.

> eller skall motståndet alltid vara på + sidan???

Motståndet "drar" åt ett håll och switchen åt det andra. Och som sagt,
pull *up* är det vanligaste av anledningar som går lite utanför
den här tråden...

> detta är koden jag tänkte köra:

OK, sätt en kommentar på varje rad så vet man vad du vill att de ska göra.

Men allt mellan "interrupt" och "main code" kan plockas bort, den kommer i alla
fall aldrig att köras eftersom du inte använder interrupt.

Sen så kommer det i alla fall inte att fungera.
Läs på på sidan "PORT A" i databladet. Speciellt om CMCON.
Och kolla kodexempel 5-1 på samma sida. Du har nog slarvat över
den där sidan lite, det är en av de viktigaste sidorna i databladet och det
som står där *måste* vara kristallklart, annars får du problem.... :-)
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Inlägg av Bosen »

tack sodjan igen... då vet jag vad jag ska läsa på! :)
Skriv svar