| Norbert Moch, Hannover, www.NorbertMoch.de mail@NorbertMoch.de © Copyright 2010 |
| PIC Mikrocontroller, µC, C18, MCC18, PIC18F45K20, C Code |
Der
PIC-Controller ist in vielfältigen
Varianten (auch hier , offline
hier)
beginnt bei ca. 60 ct Endkundenpreis (z.B. bei Reichelt.de)
erhältlich.
Es gibt 8, 16 und 24 Bitvarianten. Für den Hobbyanwender reicht meistens
eine PIC18F-8-Bit-Variante (beginnend bei ca. 2,- Euro) aus.
Nötige Entwicklungssoftware (z.B. C
Compiler mit Software-Debugger von Microchip
, nur kostenlose Registrierung nötig) gibt es kostenlos und Entwicklungsboard
(z.B. PICkit3
Debug Express,
enthält Entwicklungsboard mit PIC18F45K20)
sind preisgünstigerhältlich.
Beim Hersteller microchip, kann direkt bestellt werden, microchipdirect.com/default.aspx
, z.T. in deutsch.
Produkt selector, microchip.com/productselector/MCUProductSelector.html
und hier microchip.com/TechDocByProduct.aspx
und
hier microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2661
Application Notes microchip.com/stellent/idcplg/function/?IdcService=SS_GET_PAGE&nodeId=1469&ln=en
und C Code (MCC18) Beispiele microchip.com/CodeExamplesByFunc.aspx
Allgemeine
Infos
gibt
es
auch
auf
der
Wikipediaseite
de.wikipedia.org/wiki/PICmicro
und de.wikipedia.org/wiki/Mikrocontroller
| C
Programme Alle aufgeführten Programme sind mit dem kostenlosen MPLAB C18 C-Compiler erstellt worden und wurden auf dem PIC18F45K20 * getestet (PICkit3). |
Sonstiges |
|
| Blinklicht, Verzögerung durch Delay1KTCYx(250) ohne while-Schleife | ||
| Blinklicht, Verzögerung durch Delay1KTCYx(250) | Links | |
| Blinklicht, Verzögerung
durch Sinusberechnung |
PICkit3 | |
| 8 LED-Zeile mit induviduellen Blink-Muster | Fotos von PIC-Controllern | |
| Zu- und abnehmender LED-Balken | ||
| Interne Taktfrequenzumschaltung | ||
| Function delay_ms | ||
| Function Taster, entprellen | ||
| Function spiegeln | ||
| 10h-Timer |
News:
Neue Version von MPLAB IDE (MPLAB X) erschienen, die jetzt erstmalig auch unter Linux und Mac OS läuft. Info: MPLAB X und hier, Download: hier
Sehr
interessante PIC-Mikrocontroller Familien mit 12 Bit Analog-Digital-Wandler
in 28 oder 40 (SP-)DIP-Gehäuse
PIC18F66K80
Family ohne USB (u.a. PIC18F25k80, PIC18F26k80, PIC18F45k80, PIC18F46k80)
PIC18F47J53
Family mit USB (u.a. PIC18F26J53, PIC18F27J53, PIC18LF26J53, PIC18LF27J53)
nur 28 SPDIP
z.B. hier erhältlich auch für Endverbraucher: tme.eu
Lernpaket PIC-Mikrocontroller, Franzis, 99,- €, Platine mit PIC18F23K22-Mikrocontroller, USB-ControllerNeu entdeckt:
Interessante PIC-Mikrocontroller mit 5 Bit (32 Stufen) Digital-Analog-Wandler-Ausgang in 28 oder 40 (SP-)DIP-Gehäuse
2 Beispielfotos von PIC-Controllern,
weitere unten
![]() 12F675 |
![]() 18F14K50 |
| Blinklicht, Verzögerung durch Delay1KTCYx(250), ohne while-Schleife |
| Blinklicht, Verzögerung durch Delay1KTCYx(250) |

| Blinklicht, Verzögerung durch Sinusberechnung |

//
Blinklicht
//
// Sofern nichts anderes angegeben wird beträgt die
default-Frequenz
// des internen Taktgebers 1 MHz. Bei dieser Frequenz ergibt sich
eine
// ein Blinkfrequenz von ca. 1/2 Hz = 1 Sekunde leuchten, eine
dunkel.
#include "p18F45k20.h"
#include "math.h"
unsigned char x;
//
Variablendeklaration/-definition
long s;
void main (void)
// Hauptprogramm
{
TRISD = 0b00000000;
// Alle 8 Ausgänge von PORTD werden als
Ausgänge geschaltet
while (1)
// Endlodschleife
{
LATD =
0b01010101; // Muster des PORTs
D
for
(x=0;x<50;x=x+1)
// for-Schleife, zählt von 0 bis 50, x wird jeweils um 1
erhöht
s=sin(x);
// Sinuswert wird von x berechnet und in die
Variable s geschrieben
//
Achtung:
Es
wird
mit RAD und nicht mit GRAD
gerechnet, hier nicht relevant
LATD = 0b10101010;
for
(x=0;x<50;++x)
// for-Schleife, zählt von 0 bis 50, x wird
jeweils um 1 erhöht, inkrementieren (++x)
s=sin(x);
//
http://de.wikipedia.org/wiki/Inkrement_und_Dekrement
}
}
| 8 LED-Zeile mit induviduellen Blink-Muster |
| Zu- und abnehmender LED-Balken |

| Interne Taktfrequenzumschaltung |

#include "p18f45k20.h"
#include "delays.h"
// Hier werden du die möglichen Frequenzen festgelegt
#define OSC_0250_kHz 0b100111111
// Niedrige
Freq. 0b00011111
#define OSC_8000_kHz 0b111011111
//
Hohe Freq. 0b00100000
#define Switch_Pin PORTBbits.RB0
// Taster (Switch)
void main (void)
{
//
Einstellungen für Taster
INTCON2bits.RBPU = 0;
// INTCON2: INTERRUPT
CONTROL 2 REGISTER,
// RBPU:
PORTB Pull-up Enable bit
// PORTB
pull-up-Widerstände werden in Verbindung mit WPUP aktiviert
WPUB = 0b11111111;
// aktiviert
Pullup-Widerstände on RB
ANSELH =
0b00001111;
// AN8-12 are digital inputs (AN12 on RB0)
TRISB =
0b00000001;
// PORTB bit 0 (connected to switch) is input
(1)
//
Einstellungen für die LEDs
TRISD = 0b00000000;
// PORTD bit 0
bis 7 werden als Ausgang aktiviert
LATD = 0;
// Alle PORTD-Ausgänge LOW
while (1)
// While-Schleife wird nie
verlassen da die Bedingung Wahr immer erfüllt ist
{
if (Switch_Pin ==
0)
// Wenn Taster nicht betätigt Inter
Oszillatorfrequenz 8000kHz
OSCCON = OSC_8000_kHz;
// OSCCON = Oscillator
Control Register,
else
//
Wenn Taster nicht betätigt Inter Oszillatorfrequenz 02500kHz
OSCCON = OSC_0250_kHz;
LATD = ~LATD;
// toggle LATD, Alle Ausgänge LOW gehen auf
HIGH und umgekehrt
Delay1KTCYx(100);
// Delay 100 x 1000 = 100 000 Cycles;
400ms @ 1MHz
}
}
Programm als TXT-Datei (hierbei
bleibt
beim Kopieren die Formatierung erhalten)
RBPU: PORTB Pull-up Enable bit
0 = Interner Pull-Up-Widerstand aktiviert
Siehe auch Datensheet PIC18F45K20, Seite 110
ww1.microchip.com/downloads/en/devicedoc/41303g.pdf
OSCCON Register
IRCF2 bis IRF0 (OSCCON-Register-Bit 4 bis Bit 6)
Interner Oscillator Frequenz Auswahl-Bits
111 = 16 MHz
110 = 8 MHz
101 = 4 MHz
100 = 2 MHz
011 = 1 MHz
010 = 500 kHz
001 = 250 kHz
000 = 031 kHz
| IDLEN |
IRCF2 |
IRCF1 |
IRCF0 |
OSTS |
IOFS |
SCS1 |
SCS0 |
| Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
Siehe auch Datensheet PIC18F45K20, Seite 029
ww1.microchip.com/downloads/en/devicedoc/41303g.pdf
ANSELH, Analog Select Register 2
| - |
- |
- |
ANS12 |
ANS11 |
ANS10 |
ANS09 |
ANS09 |
| RB7 |
RB6 |
RB5 |
RB4 |
RB3 |
RB2 |
||
| Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
1 = Digital Input Buffer ist deaktiviert
0 = Digital Input Buffer ist aktiviert
ANSELH = 0b00011111;
Siehe auch Datensheet PIC18F45K20, Seite 126 und 137
ww1.microchip.com/downloads/en/devicedoc/41303g.pdf
I/O Ports
mikroe.com/eng/chapters/view/4/chapter-3-i-o-ports/
| Function
delay_ms |
Die Funktion delay_ms
ermöglicht eine Verzögerung in
Millisekunden (ms). Max. 32767 ms

void delay_ms(int ms)
{
for (z=1; z<ms; z++)
{
Delay10TCYx(25);
}
}
Delay10TCYx(25), bedeutet 25 x 10 000
= 250 000 Cyclen entspricht 1 ms,
hängt aber von der Taktfrequenz
des µC ab.
Delay-Berechnung
4 Takt = 1 Zyklen
Osillatorfrequenz Zyklen
pro Sekunde Verzögerung
4 Mhz
1.
000.000
1000 ms
1 MHz (Default after Reset) bei PIC18F45K20
Funktion als TXT-Datei (hierbei bleibt
beim Kopieren die Formatierung erhalten)
Die Funktion wird mit "delay_ms(1000);"
aufgerufen.
1000 steht für einen Wert von 0 bis max. 32767, der entsprechend
eingetragen werden kann.
for-Schleife
c-howto.de/tutorial-schleifen-for.html
peacesoftware.de/ckurs9.html
Funktionen in C
c-howto.de/tutorial-funktionen.html
uni-forst.gwdg.de/~wkurth/cb/html/alp_funktion.pdf
| Function Taster, entprellen |
Die Funktion Taster
entprellt (debounce) den Taster
void Taster (void)
{
Switch_Count = 5;
do
{
if (Switch_Pin == 0)
Switch_Count++;
else Switch_Count = 0;
Delay10TCYx(25); // delay 250
cycles or 1ms.
} while
(Switch_Count < DetectsInARow);
}
Funktion als TXT-Datei (hierbei bleibt
beim Kopieren die Formatierung erhalten)
Entprellung, AVR
mikrocontroller.net/articles/Entprellung
| Function spiegeln |
In C gibt es dafür kein Befehl.
aus z.B. 0b1111000
wird 0b00001111
oder 0b10101010
wird 0b01010101
void spiegeln (void)
{
unsigned
char ze = 0;
unsigned
char shift = 0;
for
(shift=0; shift<8; ++shift)
{
ze
=
ze
+
((LED_Display<<shift
&
0b10000000)>>7-shift);
}
LED_Display
= ze;
}
Funktion als TXT-Datei (hierbei bleibt beim Kopieren die Formatierung erhalten)
Die Funktion wird mit
"spiegeln();" aufgerufen.
| Links |
Allgemein
PIC-Microchip-Controller
sprut.de/electronic/pic/index.htm
PIC-Turorial
http://pic-projekte.de/pic_tutorial.html
PIC18, Grundlagen
http://www.fernando-heitor.de/index.php/wiki/doku.php/id,mikrocontroller;pic18/
Forum: 16-Bit Core (instructions, reset, WDT, specifications...) PIC17Cxx, PIC18Fxxx
http://www.microchip.com/forums/f7.aspx
PIC Microcontrollers,
english
mikroe.com/eng/chapters/view/1/introduction-world-of-microcontrollers/
Code Examples, fast alle C Code MCC18, Micochip C, (PIC18 auswählen,
3. Button)
http://www.microchip.com/CodeExamplesByFunc.aspx
Messen, Steuern und Regeln mit PIC-Mikrocontrollern
tinyurl.com/2wyzc9p
freebooksearcher.info/downloadbook.php?id=16337
tinyurl.com/34wjakb
PIC
und C
Kostenloser C Compiler von microchip, siehe unten
MPLAB C for PIC18 vX.XX in LITE mode
microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010014
Kleiner C Kurs für PIC Mikrocontroller
http://pic-projekte.de/pic_c.html
PIC-Turorial
pic-projekte.de/pic_tutorial.html
C18 Step by Step, Imparare a programmare
i PIC 18, 264 Seiten
laurtec.it/italiano/tutorial/c18_step_by_step/BK001-IT_c18_step_by_step.pdf
C18 Code, laurtec.it/italiano/tutorial/c18_step_by_step/esempi_C18.zip
How to use MPLAB IDE with MPLAB C18 Complier
embeddedcraft.org/mplabuse.html
MPLAB
MCC18 C-Pprogramming Tutorial
w3.id.tue.nl/fileadmin/id/objects/E-Atelier/doc/Manuals/MPLAB_MCC18_C_tutorial_EN.pdf
Introduction to Programming and Programmable
Devices, PIC, MCC18
http://data.bolton.ac.uk/staff/ks3/ECE1011/
An introduction to programming, The Microchip
PIC in CCS C
scribd.com/doc/886920/PICmicro-MCU-C-An-Introduction-to-Programming-the-Microchip-PIC-in-CCS-C#fullscreen:on
Microchip PICs, Most code on this page was
written using the CCS compiler
hades.mech.northwestern.edu/index.php/Microchip_PICs
Baseline PIC C Programming Tutorials
gooligum.com.au/tut_baseline_C.html
Libreria C18 LaurTec, laurtec.it/italiano/tutorial/c18_step_by_step/LaurTec_c18_libraries.zip
Das Inverse Pendel, PIC18F452, C18
cs.hs-rm.de/~linn/vpdv0708/invPendel2/html/start.html
cs.hs-rm.de/~linn/vpdv0708/invPendel2/stuff/InversesPendelWS07_08.pdf
Das "Inverse Pendel", PIC18F452, C 18
cs.hs-rm.de/~linn/vpdv05/jopp_et_al/index.html
Das Inverse Pendel, PIC18F452, C 18
http://www.cs.hs-rm.de/~linn/vpdv05/leimbert_rohrbach/index.html
Aufzugssteuerung per PIC18F452, C18
cs.hs-rm.de/~linn/vpdv06/aufzug/documentation.pdf
Aufzugsteuerung, PIC18f4550, C18
cs.hs-rm.de/~linn/vpdv05/aufzug/programmierung.html
C allgemein
C (Programmiersprache),
Wikipedia
de.wikipedia.org/wiki/C_(Programmiersprache)
C, Master index
home.fhtw-berlin.de/~junghans/cref/master_index.html
Übersicht über die C Standard-Bibliothek
www2.hs-fulda.de/~klingebiel/c-stdlib/index.htm
C Reference Card (ANSI)
refcards.com/docs/silvermanj/ansi-c/ansi-c-refcard-a4.pdf
C-Befehle
sven-wambsganss.de/download/c_befehle_version2.3.pdf
Linksammlung C, english
lysator.liu.se/c/
C von A bis Z von Jürgen Wolf, komplettes Buch mit 1116 Seiten als
kostenloser download
download.galileo-press.de/openbook/c_von_a_bis_z/galileocomputing_c_von_a_bis_z.zip
oder online:
hs-augsburg.de/~sandman/c_von_a_bis_z/
Einführung
in C
eggdrop.ch/texts/c/index.htm
Programmierung in “C” beim Microcontroller, 13 Seiten (Link
bitte in Browser kopieren, Läst sich scheinbar durch die
Leerzeichen nicht verlinken, funktioniert auch nicht mit http://tinyurl.com)
http://141.69.160.32/~krausg/ATMEL_ATM1_Board/CD_Atmelboard ATM1/Alles
fuer die Programmierung und
Bedienung/Unterricht_Manuskript_C für
Microcontroller/Microsoft Word - C-MICRO1.pdf
Grundlagen
der
C/C++-Programmierung
mut.de/books/3827264537/Grundlagen
der C++-Programmierung.htm
PIC-Microcontroller: Programmierung in Assembler und C
tinyurl.com/3ad4r82
(books.goggle)
C als erste Programmiersprache: Vom Einsteiger zum Profi
tinyurl.com/2wyvwje
(books.goggle)
ANSI-C vom Einsteiger zum Profi, 341 Seiten
et.hs-mannheim.de/dit/Scripten_LV/DV1_2_Skript.pdf
Tutorial / Einsteigerkurs in das Programmieren mit ANSI C, 295 Seiten
upload.wikimedia.org/wikibooks/de/8/8d/CProgrammierung.pdf
Einführung in die Programmiersprache C, 97 Seiten
krucker.ch/Skripten-Uebungen/Inf1/C_Kurs(11-11-2003).pdf
Programmieren in C, Eine Einführung, 81 Seiten
uni-giessen.de/hrz/software/programmiersprachen/C/c_alles.pdf
ANSI-C Programmierung
ba-dresden.de/~engelhardt/Lehrunterlagen/ANSI-C_Folien_2007_Dez_10.pdf
ANSI-C im Überblick, 98 Seiten
iks.hs-merseburg.de/~uschroet/Literatur/C_Lit/ansi-c.pdf
ANSI-C im Überblick, 93 Seiten
info.baeumle-courth.eu/ansic.html
Programmieren in C - Überblick
netzmafia.de/skripten/ad/thomas-c/index.html
Programmieren in C, 90 Seiten
ipp.tu-clausthal.de/fileadmin/IPP/Dokumente/Skripte_Plaene/EP/EP_Skript_ss09.pdf
Einf¨uhrung in die Programmiersprache C, 134 Seiten
math.tu-bs.de/~c-kurs/datenblaetter/skript.pdf
Programmieren in C, 110 Seiten
fbim.fh-regensburg.de/~sce39014/pg1/pg1-skript.pdf
Einf¨uhrung in die Programmierung mit C, 229 Seiten
cs.hs-rm.de/~panitz/c/skript.pdf
Programmieren in C, 206 Seiten
vorlesungen.uni-osnabrueck.de/informatik/cc02/cc.pdf
C-Crashkurs, 31 Seiten
www-i6.informatik.rwth-aachen.de/web/Teaching/Lectures/WS07_08/SysPro/uebung/crashkursC.pdf
Kurzeinführung in die Programmiersprache C, 62 Seiten
hmh-ev.de/files/ckurs.pdf
ANSI-C for L-Kiss, Text deutsch, Atmega, 32 Seiten
lemps.ch/kiss/C-Tool_09_V2_2Kiss.pdf
Programmieren in C, 74 Seiten
rz.uni-osnabrueck.de/Zum_Nachlesen/Skripte_Tutorials/Programmieren_In_C/pdf/cprog.pdf
portabler C
Compiler, Dev- C++, deutsche Benutzeroberfläche (IDE) einstellbar
sourceforge.net/projects/devcpp-portable/files/devcpp-portable/4.9.9.2%20Revision%204/Dev-CppPortable_4.9.9.2_Revision_4.paf.exe/download
The Dev- C++
Resource Site
bloodshed.net/dev
| PICkit3 |
microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en538340&redirects=pickit3
digital-bahn.de/ab/2010/ab-2010-04.pdf
reichelt.de/?ACTION=3;ARTICLE=87178;GROUPID=2969;PROVID=4
| Fotos von PIC-Controllern: |





Alle zusammen:

Kritik, Anregungen etc. bitte an den Webmaster: webmaster
©
Copyright, Norbert Moch, Kleiststr. 9, 30163 Hannover, Tel.
0511/624039, www.NorbertMoch.de,
mail@NorbertMoch.de
nichtkommerzielle, unveränderte Weitergabe mit Quellenangabe
für privaten Gebrauch ist gestattet Veröffentlichung im
Internet ist nicht gestattet