Microcontroller How To

aus Metalab Wiki, dem offenen Zentrum für meta-disziplinäre Magier und technisch-kreative Enthusiasten.
Zur Navigation springenZur Suche springen

how to für sdcc und pic18f452 funzt in dieser Form (ziemlich sicher oder wahrscheinlich) nicht mit pic16xxx modellen

kommt ganz ohne windows aus. (bis auf den Schritt den Bootloader das allererste Mal auf den PIC zu schreiben)

detailed how to: http://www.freenet.org.nz/sdcc/


auf die schnelle: OHNE sdcc und libraries neu zu kompilieren. funzt unter ubuntu, debian. sdcc unterstützt pic18 erst ab der debian-testing SDCC version. sry stable-folks (gell legba ;) )

apt-get install sdcc gpasm gputils

Tinyul kompilieren


dann alles hier in ein Verzeichnis:


mini.c


#include"pic18fregs.h"
#define LED_PIN   PORTAbits.RA4

void delay_ms(long ms)
{
    long i;

    while (ms--)
        for (i=0; i < 330; i++)
            ;
}

void main(void) {

		TRISA = 0;
        LED_PIN = 0;
		
		LED_PIN = 0;
        delay_ms(250);
        LED_PIN = 1;
        delay_ms(250);
}

crt018.asm

    processor  18F452
    radix  DEC
    include "p18f452.inc"

config CODE
    DATA 3F32H

IDLOCS CODE
    DATA 1234H

;;  imports

    EXTERN _main

; defines of interrupt registers

; vars for saving/restoring registers
;STATUS      EQU   0x03         
;PCLATH      EQU   0x0A
;RP0         EQU   5
;RP1         EQU   6

;BANK0    UDATA
;int_save       RES   2
;  GLOBAL int_save

;svrWREG     RES 1
;  GLOBAL svrWREG

; this makes sure that we have a jump to int handler
;    EXTERN inthandler
;INTVEC code
;    goto inthandler


_reset code
    pagesel _main
    goto _main

; this makes sure we jump to main
startup code
    pagesel _main
    goto _main


    END

dann einmalig:

gpasm -c crt018.asm


18f452.lkr

LIBPATH .

CODEPAGE   NAME=vectors    START=0x0            END=0x29           PROTECTED
CODEPAGE   NAME=page       START=0x2A           END=0x7FFF
CODEPAGE   NAME=idlocs     START=0x200000       END=0x200007       PROTECTED
CODEPAGE   NAME=config     START=0x300000       END=0x30000D       PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE       END=0x3FFFFF       PROTECTED
CODEPAGE   NAME=eedata     START=0xF00000       END=0xF000FF       PROTECTED

ACCESSBANK NAME=accessram  START=0x0            END=0x7F
DATABANK   NAME=gpr0       START=0x80           END=0xFF
DATABANK   NAME=gpr1       START=0x100          END=0x1FF
DATABANK   NAME=gpr2       START=0x200          END=0x2FF
DATABANK   NAME=gpr3       START=0x300          END=0x3FF
DATABANK   NAME=gpr4       START=0x400          END=0x4FF
DATABANK   NAME=gpr5       START=0x500          END=0x5FF
ACCESSBANK NAME=accesssfr  START=0xF80          END=0xFFF          PROTECTED

SECTION    NAME=_reset    ROM=vectors
SECTION    NAME=CONFIG     ROM=config
SECTION    NAME=code ROM=page


Makefile

mini.hex: mini.o crt018.o
	gplink \
        -c \
        -s 18f452.lkr \
        -o $@ \
        -m \
        $^ \
        -I /usr/share/sdcc/lib/pic16 \
        pic18f452.lib

mini.o: mini.asm
	gpasm -c $<

mini.asm: mini.c
	sdcc -S -mpic16 -p18f452 $<

tadaaaaa! jetzt einfach "make" eingeben oder "make mini.hex"

mit Tinyul aufn PIC loaden:

tinyul -s 115200 mini.hex

baudrate je nach bootloader (16f877:115200, 18f452:19200) wählen.

(und reset drücken)

fertig. jetzt sollte das rote led(oder grüne) LED blinken. Ob das wirklich 250 MilliSekunden, vor jedem Leuchten des LEDs, sind bleibt mal dahingestellt.


sdcc & pic16f877

mit pic16f877 via serial2USB adapter

sdcc installen, pytbl (python tinybootloader)

4wiki.c:
#define __16f877
#include"pic/pic16f877a.h"
#define ra4_led 0x04;

void delay_ms(long n){
	unsigned int c;
	while(n--) {
		for (c=0;c<330;c++) {
			;
		}
	}
}

void main(void) {
    TRISA = 0;
    while(1) {
		PORTA=0xff;
		delay_ms(250);
		PORTA=0x00;
 		delay_ms(250);
   }

}


sdcc -mpic14 -pp164877 4wiki.c
(ubuntu) sudo ln -s /dev/ttyUSB0 /dev/ttyS66
python pytbl.py -p 66 -f 4wiki.hex

led should blink now.