PIC18F458 minimum's opkobling..

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Danish to

Threaded View
Hejsa

Jeg er ved at forsøge mig med PIC18 i forbindelse med et projekt. Jeg
har besluttet først at wrappe et minimum af forbindelser op, så jeg blot
ved at der er hul igennem.

til dette formål har jeg lavet diagrammet:
http://www.ironmaiden.dk/pic18.pdf

Dette er wrappet op, og RS232 forbindelsen testet, ved at kortslutte de
to ben der går til CPU
Jeg har undladet at implementere reset knappen endnu, og blot hevet ben
1 høj, vha en 1kohm modstand.

Min kildekode til PIC'en ser således ud:
-----------------------------------------------------------------------------------------
    list p=PIC18F458    ; set processor type
    list n=0        ; supress page breaks in list file
    include <P18F458.INC>

    CONFIG    OSC = EC
      CONFIG     PWRT = ON ; Extern OSC og Power up timer
    CONFIG    WDT = OFF    ;
;************************************************************
; Reset and Interrupt Vectors

    org    00000h    ; Reset Vector
    goto    Start

    org    00008h    ; Interrupt vector
    goto    IntVector

;************************************************************
; Program begins here

    org    00020h    ; Beginning of program EPROM
Start
    clrf    LATB    ; Clear PORTB output latches
    clrf    TRISB     ; Config PORTB as all outputs
    bcf    TRISC,6    ; Make RC6 an output

    movlw    81h    ; 19200 baud @ 10MHz
    movwf    SPBRG    ; Flyt X til Baud Rate Generator Register
    
    bsf TXSTA,SYNC    ; Synkron overførsel
    bsf    TXSTA,CSRC    ;
    bsf    TXSTA,TXEN    ; Enable transmit
    bcf    TXSTA,BRGH    ; Select low baud rate
    
    bsf    RCSTA,SPEN    ; Enable Serial Port
    bsf    RCSTA,CREN    ; Enable continuous reception

    bcf    PIR1,RCIF    ; Clear RCIF Interrupt Flag
    bsf    PIE1,RCIE    ; Set RCIE Interrupt Enable
    bsf    INTCON,PEIE    ; Enable peripheral interrupts
    bsf    INTCON,GIE    ; Enable global interrupts

;************************************************************
; Main loop

Main
    movlw    48h        ;    H
    call    Transmit    ;
    movlw    45h        ;    E
    call    Transmit    ;
    movlw    4ch        ;    L
    call    Transmit    ;
    movlw    4ch        ;    L
    call    Transmit    ;
    movlw    4fh     ;    O
    call    Transmit    ;
    movlw    20h        ;
    call    Transmit    ;
    movlw    57h        ;    W
    call    Transmit    ;
    movlw    4fh        ;    O
    call    Transmit    ;
    movlw    52h        ;    R
    call    Transmit    ;
    movlw    4ch        ;    L
    call    Transmit    ;
    movlw    44h     ;    D
    call    Transmit    ;

Loop
    goto    Loop    ; loop to self doing nothing

;************************************************************
; Transmit Character routine
Transmit
    btfss    TXSTA,TRMT     ; Er Transmit buffer fuld ?
    goto    Transmit    ; Hvis fuld, test igen

    goto    Sendchar    ; Hvis tom, hop til næste rutine
    
Sendchar
     movwf    TXREG        ; Flyt fra WREG register til transmit register

    return
;************************************************************
; Interrupt Service Routine

IntVector
    ; save context (WREG and STATUS registers) if needed.

    btfss    PIR1,RCIF    ; Did USART cause interrupt?
    goto    OtherInt    ; No, some other interrupt

    movlw    06h        ; Mask out unwanted bits
    andwf    RCSTA,W        ; Check for errors
    btfss    STATUS,Z    ; Was either error status bit set?
    goto    RcvError    ; Found error, flag it

    movf    RCREG,W        ; Get input data
    call      Transmit    ;
    goto    ISREnd        ; go to end of ISR, restore context, return
    
RcvError
    bcf    RCSTA,CREN    ; Clear receiver status
    bsf    RCSTA,CREN
    movlw    0FFh        ; Light all LEDs
    movwf    PORTB    
    goto    ISREnd    ; go to end of ISR, restore context, return

OtherInt
    goto    $    ; Find cause of interrupt and service it before returning from
            ; interrupt. If not, the same interrupt will re-occur as soon
            ; as execution returns to interrupted program.

ISREnd
    ; Restore context if needed.
    retfie

    end

--------------------------------------------------------------------------------------------



Jeg kan dog ikke rigtigt få hul igennem. Da jeg ikke har mulighed for at
lege med ombrænding af PIC'en pt (brænder står på uni), vil jeg høre om
der er noget i vejen for at undlade at forbinde de resterende ben, da
disse ikke benyttes (det burde jo være ligemeget om der er noget på
benene, når der ikke læses fra dem, og INT benene er jo sat til output
(PORTB).)

Er interesseret i om ideen bag designet, og koden er helt hen i vejret,
eller om det burde fungere (jeg vil som sagt ikke udeluykke at PIC'en er
brændt forkert)

MVH Jakob Fromm

Re: PIC18F458 minimum's opkobling..
Quoted text here. Click to load it
-----------------------------------------------------------------------------------------
Quoted text here. Click to load it
--------------------------------------------------------------------------------------------


Det var godt nok et ambitiøst "Test-om-der-er-hul-igennem-program".
Tror du ikke det ville være smart at lave et lille program, der f.eks.
toggler et port-ben for at teste om din prossesor overhovet triller rundt
;o)



Re: PIC18F458 minimum's opkobling..

Quoted text here. Click to load it

Denne er harmløs, men når man falder over sådan noget er der sikkert også
andre bugs i dit program.



Quoted text here. Click to load it

Ups, det er ikke så godt.
Du bruger jo netop WREG og STATUS i din interrupt-rutine, så du er nød til
at gemme indholdet af dem og så genskabe dem igen når du afslutter dit
interrupt.


Quoted text here. Click to load it

Her burde du så genskabe WREG og STATUS, så de er intakte når du vender
tilbage til dit hovedprogram.

Som sagt er det alt for stort et program til en hul-test når du hverken ved
om dit hardware virker, om din processor er brændt rigtig og dit porgam ikke
er fejlfrit.



Re: PIC18F458 minimum's opkobling..
Quoted text here. Click to load it

Her bliver jeg nysgerrig. Hvad er bug'en i dette tilfælde ?

Jeg har netop problemer med at udføre noget lignende:
-------------------------------------------------------------------------
    movf    RCREG,W        ; Get input data
    cpfseq    68h
    call    hello         ; Hvis input = 68h, så skal "hello" ikke kaldes

    movwf    TXREG        ; Echo character back
    goto    ISREnd        ; go to end of ISR, restore context,
-------------------------------------------------------------------------

Og så sådan et helt generelt spørgsmål, lidt relateret til ovenstående
kode. Hvordan laver jeg nemt et kald såfremt mit input er lig en bestemt
værdi (BEQ på M68000), på PIC, kan man så vidt jeg kan se, kun springe
kode over.

MVH Jakob Fromm

Nu med PIC brænder, og nogenlunde fungerende board.

Re: PIC18F458 minimum's opkobling..
Hej

Husk at digital OG analog forsyning SKAL være forbundet eller sker der
intet!!!
(bitter erfaring, dog ikke min egen:-)

PS: det skulle vel ikke være jfpe04?
--
Hilsen Mikkel
------
We've slightly trimmed the long signature. Click to see the full one.
Re: PIC18F458 minimum's opkobling..
Quoted text here. Click to load it

Det lykkedes efter genbrænding af PIC'en at få systemet op at køre, og
det snurrer lige så stille efterhånden. Næste stop er bootloader :D

Og jo, det er jfpe04 :D

Tak for forslagene

/Jakob Frommm

Re: PIC18F458 minimum's opkobling..
Quoted text here. Click to load it
Efter genbrænding af PIC, virker det nogenlunde :D

Og ja, det er jfpe04

Næste mål er enten picbrænder, eller bootloader (bliver nok en P16PRO
brænder (www.allpicw.com)

/Fromm

Site Timeline