Forum: Mikrocontroller und Digitale Elektronik PIC18F1220 Anfänger


von blacky (Gast)


Lesenswert?

Hallo zusammen,

bin absoluter neuling im Umgang mit PIC Bausteinen. Habe mich jetzt 
einige Tage eingelesen in Assembler. Habe auch schon den ein oder 
anderen Tip hier im Forum lesen können, an dieser Stelle schon einmal - 
schön das es so ein Forum gibt. Nur zu meinem Vorhaben konnte ich nichts 
wirklich Nützliches finden. Ich möchte einen PIC 18F1220 benutzen. Zum 
brennen habe ich von Microchip MPLAB ICD2 erfolgreich instaliert. Jetzt 
fehlt mir nur noch ein Quelltext mit dem ich erstmal anfangen kann eine 
programierung verstehen zu lernen.
Ich dachte hierbei an das Anlegen eines Signals an einen Port welches 
über einen anderen wieder ausgegeben werden soll.

Eigentliche Aufgabe die der Pic später erfüllen soll ist die, dass er 
ein Impuls 72Hz (die ansteigende Flanke eines Rechtecksignals) erhält 
diesen dann abgeändert auf einem anderen Port ausgiebt. Abgeändert 
heisst der Impuls soll   wieder zu einem Rechteck werden jedoch mit 
einer periodendauer von 80us (20us-high dann 60us-low nochmals 20us high 
und dann low.
Über einen anderen Port soll die abfallende Flanke des Rechtecksignals 
gespeisst werden und soll auch abgeändert wieder ausgegeben werden. 
Jedoch mit einer Periodendauer von 40us hier dann (20us high - 20us low, 
20us high - 20us low, 20us high - low).

hier kleine Skizze zum bessern Verständnis (nur model)

Rechtecksignal:    _________----------__________----------_________

flanken detektiert:__________!_________!_________!_________!_________

abgeändertes Signal:_________-_-_______-_-_-_____-_-_______-_-_-_____

Hat jemand eine Vorstellung ob dies mit diesem Pic 18F1220 realisierbar 
ist oder hat jemand einen Quelltext mit dem so etwas einfach mal 
auszuprobieren  wäre? Vielen Dank für eure Hilfe, ich hoffe ihr könnt 
mir helfen.

Falls jemand ein gutes Tutorial zu dem MPLAB ICD2 gefunden oder gemacht 
hat dann lasst es mich wissen hab was gutes noch nich gefunden, am 
besten natürlich zu dem PIC den ich verwende.

MFG

von Master S. (snowman)


Lesenswert?

muss es assembler sein? um die ersten schritte in der uC-welt zu machen, 
würde ich dir den C18 und MPLAB empfehlen (beides gratis von Microchip). 
ein einfaches tutorial findest du bei www.sprut.de -> C-Compiler
ich würde zuerst mit einem einfachen LED-blinklicht anfangen, dann mit 
einem taster und LED was machen und dann das, was du möchtest. (für das, 
was du willst, musst du sowieso diese schritte vorher machen - du 
verlierst also damit keine zeit).

von Severino R. (severino)


Lesenswert?

blacky wrote:
> Hallo zusammen,
>
> bin absoluter neuling im Umgang mit PIC Bausteinen.

Willkommen in der PIC-Welt.
> Jetzt
> fehlt mir nur noch ein Quelltext mit dem ich erstmal anfangen kann eine
> programierung verstehen zu lernen.

Auf http://www.sprut.de gibt es viele Infos zu PICs
Weiter auf:
http://www.fernando-heitor.de
http://www.electronic-engineering.ch

> Hat jemand eine Vorstellung ob dies mit diesem Pic 18F1220 realisierbar
> ist

Geht schon. Wie genau müssen die Zeiten eingehalten werden?


> Falls jemand ein gutes Tutorial zu dem MPLAB ICD2 gefunden oder gemacht
> hat dann lasst es mich wissen hab was gutes noch nich gefunden, am
> besten natürlich zu dem PIC den ich verwende.

Der ICD2 ist eine nette runde Dose mit ein paar Anschlüssen. Viel gibt 
es dazu nicht zu sagen (ausser wenn's mal nicht läuft).
Was Du lernen müsstest, ist die Bedienung von MPLAB selber, aber auch 
die Assembler-Befehle für Deinen PIC.

Schreib mal ein kleines Programm, das einfach nur einen Ausgang immer 
wieder ein- und ausschaltet (z.B. eine Led blinken lässt).
Wenn das läuft, kannst Du ja eine Led auf Tastendruck ein- und wieder 
ausschalten oder so.
Dann bist Du reif für Dein Vorhaben.

von blacky (Gast)


Lesenswert?

Danke für die schnellen Antworten,

mit einer Einfachen Schaltung wollte ich auch anfangen. Leider habe ich 
in Assembler keinen Quellcode für meinen PIC finden können. Habe gehört 
das auch PIC16 Codes funktionieren können. Hat jemand vieleicht einen 
Code oder kann ihn einfügen ich hänge mal meinen Bereits existierenden 
unten ran.
Ich bin mir nicht ganz sicher wie und vorallem wo ich Ports des PIC als 
Eingänge und Ausgänge deklarieren kann. Anhand des Datenblatts konnte 
ich zwar Blockdiagramme für verschiedene Ports finden.
Hoffe auf baldige Hilfe!

LIST P=18F1220    ;directive to define processor
  #include <P18F1220.INC>  ;processor specific variable definitions


;*********************************************************************** 
*******
;Configuration bits
;Microchip has changed the format for defining the configuration bits, 
please
;see the .inc file for futher details on notation.  Below are a few 
examples.



;   Oscillator Selection:
    CONFIG  OSC = LP             ;LP


;*********************************************************************** 
*******
;Variable definitions
; These variables are only needed if low priority interrupts are used.
; More variables may be needed to store other special function registers 
used
; in the interrupt routines.

    CBLOCK  0x080
    WREG_TEMP  ;variable used for context saving
    STATUS_TEMP  ;variable used for context saving
    BSR_TEMP  ;variable used for context saving
    ENDC

    CBLOCK  0x000
    EXAMPLE    ;example of a variable in access RAM
    ENDC




;*********************************************************************** 
*******
;EEPROM data
; Data to be programmed into the Data EEPROM is defined here

    ORG  0xf00000

    DE  "Test Data",0,1,2,3,4,5

;*********************************************************************** 
*******
;Reset vector
; This code will start executing when a reset occurs.

    ORG  0x0000

    goto  Main    ;go to start of main code

;*********************************************************************** 
*******
;High priority interrupt vector
; This code will start executing when a high priority interrupt occurs 
or
; when any interrupt occurs if interrupt priorities are not enabled.

    ORG  0x0008

    bra  HighInt    ;go to high priority interrupt routine

;*********************************************************************** 
*******
;Low priority interrupt vector and routine
; This code will start executing when a low priority interrupt occurs.
; This code can be removed if low priority interrupts are not used.

    ORG  0x0018

    movff  STATUS,STATUS_TEMP  ;save STATUS register
    movff  WREG,WREG_TEMP    ;save working register
    movff  BSR,BSR_TEMP    ;save BSR register

;  *** low priority interrupt code goes here ***


    movff  BSR_TEMP,BSR    ;restore BSR register
    movff  WREG_TEMP,WREG    ;restore working register
    movff  STATUS_TEMP,STATUS  ;restore STATUS register
    retfie

;*********************************************************************** 
*******
;High priority interrupt routine
; The high priority interrupt code is placed here to avoid conflicting 
with
; the low priority interrupt vector.

HighInt:

;  *** high priority interrupt code goes here ***


    retfie  FAST

;*********************************************************************** 
*******
;Start of main program
; The main program code is placed here.

Main:   goto   Init

Haupt

    goto  Haupt

Init  movlw   0x20
    movwf   FSR0
RAMClr  clrf    INDF0
    incf    FSR0,1
    btfss   FSR0,7
    goto    RAMClr
    return

;  *** main code goes here ***


;*********************************************************************** 
*******
;End of program

    END

von blacky (Gast)


Lesenswert?

ach ja beim debugen kommt folgende Fehlermeldung:

Make: The target "F:\Diplomarbeit\MpLab\Test1.o" is out of date.
Executing: "C:\Programme\Microchip\MPASM Suite\MPAsmWin.exe" /q 
/p18F1220 "Test1.asm" /l"Test1.lst" /e"Test1.err" /o"Test1.o"
Make: The target "C:\Programme\Microchip\MPASM 
Suite\Template\Code\1220temp.o" is up to date.
Skipping link step.  The project contains no linker script.
BUILD FAILED: Wed Apr 08 15:31:43 2009

mir macht das Skipping link step sorgen weil ich nicht weiß wo ich ein 
linker script finde.

von Severino R. (severino)


Lesenswert?

blacky wrote:
> Danke für die schnellen Antworten,
Bitte.

> mit einer Einfachen Schaltung wollte ich auch anfangen. Leider habe ich
> in Assembler keinen Quellcode für meinen PIC finden können.
Den Quellcode musst normalerweise Du schreiben.

>  Habe gehört
> das auch PIC16 Codes funktionieren können. Hat jemand vieleicht einen
> Code oder kann ihn einfügen ich hänge mal meinen Bereits existierenden
> unten ran.
Hast Du mal die Links angeschaut? In der kurzen Zeit konntest Du kaum 
auch nur einen Bruchteil davon lesen.

> Ich bin mir nicht ganz sicher wie und vorallem wo ich Ports des PIC als
> Eingänge und Ausgänge deklarieren kann.
Musst die TRISx Register entsprechend setzen.
TRIS ist ein unglücklicher Bezeichner, aber das Ding heisst nun mal so 
(stand für TRIState). Eigentlich bestimmt es die Datenrichtung: 
0=Output, 1=Input (=Default bei Reset)

> ach ja beim debugen kommt folgende Fehlermeldung:
Will nicht kleinlich sein, aber die Meldung kommt beim Build-Prozess.
Weil der misslang, bist Du schon gar nicht zum Debuggen gekommen.

> mir macht das Skipping link step sorgen weil ich nicht weiß wo ich ein
> linker script finde.
Unter \MCC18\lkr
Einfach zum Projekt hinzufügen.

von Master S. (snowman)


Lesenswert?

meld dich doch wider, wenn du das tutorial von sprut durchgemacht hast. 
ja?!? vorher müsste ich von dieser seite ein copy-paste machen - und ich 
finde es einfacher, wenn du gleich dort liest (zumald du dort auch 
bilder hast)

von blacky (Gast)


Lesenswert?

Auf den Seiten von Sprut und Vernando Heitor war ich schon die letzten 
Tage unterwegs gewesen. Habe aber an diesem Forum gefallen 
gefunden,deshalb schreibe ich euch!

Das ich den Quellcode normalerweise selbst schreiben muss ist mir klar, 
wollte nur mal nen anhaltspunkt haben oder nen Code zum verstehen lernen 
wie die Ports definiert werden oder so.

Naja egal ich werd mal das Tutorial durchmachen obwohl ich nicht mit C18 
sondern Assembler arbeiten wollte.

Vielen Dank für die Mühen die ich gemacht hab und ein Frohes Osterfest 
allen!

von Severino R. (severino)


Lesenswert?

blacky wrote:
> Auf den Seiten von Sprut und Vernando Heitor war ich schon die letzten
> Tage unterwegs gewesen. Habe aber an diesem Forum gefallen
> gefunden,deshalb schreibe ich euch!
Hier wird z.B. die Sache mit den I/O-Ports erklärt:
http://www.fernando-heitor.de/component/option,com_openwiki/Itemid,123/id,mikrocontroller:einfuehrung/

> Das ich den Quellcode normalerweise selbst schreiben muss ist mir klar,
> wollte nur mal nen anhaltspunkt haben oder nen Code zum verstehen lernen
> wie die Ports definiert werden oder so.
Auf welchem Board benutzt Du Deinen PIC18F1220? Hast Du ein Demo-Board 
von Microchip oder von Drittanbietern oder selbstgebaut?
Für Boards von Microchip gibt es z.T. fertige Beispiele und "Lessons".
Z.B. für das PICDEM 2 Plus:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010072&part=DM163022

oder zwar für PIC16, aber trotzdem lehrreich, weil es ganz kleine 
Beispiele sind:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010053&part=DV164101
"PICkit™ 1 All Lessons" herunterladen.

Kleines Beispiel für PIC18:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2619
"Reading a button and operating LED's with the 18CXXX"


> Naja egal ich werd mal das Tutorial durchmachen obwohl ich nicht mit C18
> sondern Assembler arbeiten wollte.
Sorry, hatte ich bei der Sache mit dem Linkerscript vergessen.
Für Assembler sind sie hier:
C:\Programme\Microchip\MPASM Suite\LKR

Bei Problemen empfiehlt es sich, das ganze Projekt zu zippen und zu 
posten. So können andere das u.U. nachvollziehen, wenn das Problem nicht 
allzusehr mit der Hardware zusammenhängt.
In den neuesten MPLAB-Versionen ist eine Funktion eingebaut, um das 
ganze Projekt zu zippen. Sonst das ganze Verzeichnis mit einem separaten 
ZIP-Utility zippen.

Wie gut verstehst Du Englisch?

von blacky (Gast)


Lesenswert?

Linker hab ich gefunden, Danke.

Habe ein selbstgebautes Board um den PIC zu brennen.

English ist kein problem, meistens!


schönen Abend noch zusamm

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.