PICkit TM 2 Beispielprogramme

Größe: px
Ab Seite anzeigen:

Download "PICkit TM 2 Beispielprogramme"

Transkript

1 Inhaltsverzeichnis PICkitTM 2 Starter Kit... 2 Programmieren des Targets mit Software PICkitTM 2 Programmer... 2 Programmieren des Targets in der IDE MPLAB... 4 Microcontroller Ein- und Ausgabe... 5 Setzen eines Digital Ausganges... 5 Lesen eines Digitalen Einganges... 6 Erfassen von Analogwerten... 7 Ereignisgesteuertes Programmieren... 9 Digitale Eingänge - Interrupt on Port Change... 9 Zugriffe auf das EEPROM Zeitgeber Zähler Komparator Anhang Configuration Bits Taktsignal Reset Die Datei P16F690.INC Das HEX-Format für Images Lothar Kerbl Seite 1 (24)

2 PICkit TM 2 Starter Kit Das PICkit TM 2 System besteht aus zwei Hardware Komponenten: PIC-Kit 2 Programmer (dieser ist über USB mit dem PC verbunden) Evaluation Board (das Target -System dieses ist mit dem Programmer über eine sechspolige Stiftleiste JP1 verbunden) Mit der Software PICkit 2 Programmer kannst du Programme in das Zielsystem laden bzw. den Inhalt des Programmspeichers des Zielsystems ansehen (und in eingeschränktem Maße auch verändern) Wenn du ernsthaft Software für das Targetsystem entwickeln möchtest, benötigst du die Integrierte Entwicklungsumgebunge ( Integrated Developer's Environmet - IDE) MPLAB (kostenloser Download von der Homepage der Firma Microchip ) Wenn du Software für das Targetsystem entwickelst, solltest du folgende Dokumentation verfügbar haben: PIC16F690 Data Sheet (Microchip-Bezeichnung: 41262e.pdf) Zusammenstellung der symbolischen Namen für den Microcontroller 16F690 (siehe Anhang Die Datei P16F690.INC Den Stromlaufplan des PICkit 2 Low Pin Count Demo Boards In diesem Skriptum sind alle Programmierübungen in Assembler geschrieben eine Übertragung der Programme nach C ist natürlich möglich. Programmieren des Targets mit Software PICkit TM 2 Programmer Mit dem Programm PICkit TM 2 Programmer und dem Programmiergerät PICkit TM 2 (über USB angeschlossen) kannst du einen Microcontrollerbaustein (z.b. den PIC16F690) einfach programmieren, wenn du das Image des Programmspeichers für den Microcontroller in einer HEX-Datei gespeichert hast (Aufbau einer solchen Datei siehe im Anhang) und das Programmiergerät mit den zur Programmierung notwendigen Pins des Microcontrollers verbindest (6 poliger Stecker am Programmiergerät - serielle Programmierschnittstelle ), es sind dies die Microcontroller Pins V PP, V DD, GND, ICSPDAT, ICSPCLK und T1G. Lothar Kerbl Seite 2 (24)

3 Bild 1 Das stand alone Programm zur Kommunikation zwischen PC und PICkit2 und zur Programmierung eines Microcontrollers, der über die serielle Programmierschnittelle angeschlossen ist. Mit Import HEX kannst du eine Datei, die ein Image für das Target System (Zielsystem) enthält, in ein Editorfenster laden. Das im Editorfenster gezeigte Speicherabbild kannst du mit Write Device in das Target System übertragen. Umgekehrt kannst du mit Read Device den Inhalt des Programmspeichers des Target Systems in das Editorfenster laden. Den Inhalt des Editorfensters kannst du in einer HEX-Datei abspeichern. ( Export HEX ) Mit dem Befehl Programmer / Verify kannst du die Gleichheit der Programme im Target System und im Editorfensters überprüfen. Die Daten, die du in den Programmspeicher des Zielsystems überträgst, werden dort in ein FLASH-EEPROM geschrieben. Das heißt das Programm bleibt auch nach dem Abschalten der Versorgungsspannung am Zielsystem erhalten. Lothar Kerbl Seite 3 (24)

4 Programmieren des Targets in der IDE MPLAB Wenn du ein Programm entwickelst und es gleich am Target testen möchtest, dann musst du: Das Programmiergerät PICkit TM 2 an der USB-Schnittstelle anschließenden Die integrierte Entwicklungsumgebung ( IDE ) MPLAB aufrufen in der IDE mit Programmer/Select Programmer / PICkit 2 das PICkit 2 auswählen eine Assemblerdatei mit folgenden Rahmen erstellen #include <p16f690.inc> friendly names für die CPU 16F690 CONFIG (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF) ORG 0x00 Festlegen der Adresse für den folgenden Programmcode.. hier steht dein Programmcode END Durch Einfügen der Datei P16F690.INC (Direktive #include ) kannst du in deinem Source Code friendly names (wie STATUS, RP0,TRISIO,... verwenden!) Beachte die Groß- bzw. Kleinschreibung vergleiche die in dieser Datei definierten friendly names mit den Angaben im Datenblatt der CPU 16F690 (z.b. Adressen der Special Function Registers...) Mit der CONFIG Direktive definierst du den Inhalt der Configuration Bits. Diese Bits werden im Programmspeicher unter der Adresse 0x2007 gespeichert. Die Werte können während des Programmablaufes weder gelesen noch verändert werden. Was die einzelnen Einstellungen bedeuten, musst du in der Originaldokumentation nachlesen. Die einstellbaren Werte sind in der Datei P16F690.INC beschrieben. Die einzelnen Optionen bewirken durch & eine Und-Verknüpfung der in der INC -Datei definierten Hexadezimal bzw. Binärwerte. (siehe dazu auch Anhang Configuration Bits ) Beim Quickbuild werden in deinem Arbeitsverzeichnis ein Assemblerlisting und eine HEX-Datei erstellt. In der IDE stehen dir Funktionen zur Kommunikation mit dem angeschlossenen Target zur Verfügung. Wenn die Verbindung zwischen Target und PC über USB hergestellt ist, kannst du das Programm direkt aus der MPLAB IDE in das Target laden (Program Device). Durch Program Device wird das aktuelle Programm im Target System überschrieben. Möglicherweise wirst du zuvor Programmspeicherinhalt des Target Systems in eine HEX-Datei retten wollen. Das geschieht durch Programmer / Read Device und anschließendes File / Export. Lothar Kerbl Seite 4 (24)

5 Die Daten, die du in den Programmspeicher des Zielsystems überträgst, werden dort in ein FLASH-EEPROM geschrieben. Das heißt das Programm bleibt auch nach dem Abschalten der Versorgungsspannung am Zielsystem erhalten. Microcontroller Ein- und Ausgabe Setzen eines Digital Ausganges Die einfachste Möglichkeit, das im Microcontroller ablaufende Programm nach außen wirken zu lassen, ist die programmierte Vorgabe eines logischen Pegels ( 0 oder 1 ) an einem der Pins des Microcontrollers. Aus dem Stromlaufplan entnehmen wir: Die Pins RC0.. RC3 sind über je eine Leuchtdiode und über Vorwiderstände (470Ω) gegen Masse geschalten ein aktiver Pegel 1 an einem dieser Pins bewirkt also einen Stromfluss von etwa 8mA aus dem Pin über die Leuchtdiode und über den Vorwiderstand gegen Masse. Dieser Strom reicht aus, um die Leuchtdiode zum Leuchten zu bringen. Wenn an einem dieser Pins ein Pegel 0 liegt, wird die entsprechende Leuchtdiode nicht leuchten. Das Programm, um einen Ausgang auf Pegel 1 (bzw. 0 ) zu setzen. #include <p16f690.inc> config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF) org 0x000 Auswahl Bank 1 : bcf STATUS,RP1 Bit 6 im Status Register auf 0 setzen und.. bsf STATUS,RP0 Bit 5 im Status Register auf 1 setzen Definition der Richtung ( Ausgang ) movlw B' ' movwf TRISC Auswahl der Bank 0 : bcf STATUS,RP1 Bit 6 im Status Register auf 0 setzen bcf STATUS,RP0 Bit 5 im Status Register auf 0 setzen Definition des Pegels (1-> HIGH, LED leuchtet) die vier LEDs sind über die Ausgänge RC0,.., RC3 angesteuert movlw B' ' movwf PORTC Ausgang auf "1" setzen Loop: goto Loop Endlosschleife end Aufgaben: Untersuche das entstehende HEX-File mit einem Editor und vergleiche es mit der Anzeige im Programm PICkit Programmer, mit dem Inhalt des Fensters Program Memory in der IDE und mit dem Ergebnis im Fenster Disassembly Listing in der MPLAB IDE. Im Disassembly Listing findest du einen Eintrag für die Adresse 0x2007 wodurch ensteht dieser? Lothar Kerbl Seite 5 (24)

6 Welche Unterschiede sind im HEX File, wenn die CONFIG-Direktive nicht eingefügt wird? Wie sieht das Flussdiagramm deines Programmes aus. Was bewirkt der letzte Befehl ( GOTO Schleife ), warum ist dieser Befehl notwendig? Was geschieht, wenn anstelle der Direktive ORG 0x00 die Direktive ORG 0x10 verwendet wird? Wird dadurch das Programm nach einem Reset an der Adresse 0x10 gestartet? Lesen eines Digitalen Einganges Um die aktuellen logischen Pegel der Eingänge RA0... RA3 anzuzeigen, schreiben wir ein Programm, das diese Eingangswerte ( 0 oder 1 ) auf den Dioden DS1... DS4 anzeigt. Wir entnehmen aus dem Stromlaufplan: Am Pin RA0 liegt über einen einstellbaren Spannungsteiler eine Spannung zwischen V DD und V SS. Am Pin RA1 liegt das Signal ICSPCLK (Stecker P1) dieses Signal ist während des Normalbetriebs aber hochohmig und beeinflusst so das Potential an diesem Pin nicht. Der Pin RA2 ist unbelegt. Der Eingang RA3 kann über den Taster SW1 über einen Vorwiderstand von 1kΩ an Masse gelegt werden. Dieser Eingang kann - durch geeignete Wahl der Configuration-Bits - auch als Reset-Eingang (/MCLR) verwendet werden. Außerdem liegt an diesem Eingang während des Programmierens die Programmierspannung (V PP ). Während des Normalbetriebes bei angeschlossenem Programmer sollte der Programmiergeräteausgang hochohmig ( weggeschalten ) sein, sodass das Potential am Pin RA3 nicht durch den Programmer beeinflusst wird 1. Die Pins RA0.. RA3 sind außerdem am Stecker J1 aufgelegt PICkit2_2: Lesen von digitalen Eingängen, Ergebnis als LED-Muster ausgeben #include <p16f690.inc> config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF) org 0x000 PORT A - Bit 0 und Bit 3 werden als "Digital I/O" festgelegt... bsf STATUS,RP1 1 Der Eingang RA3, (an dem über einen Widerstand auch der Taster SW1 des Demo-Boards angeschlossen ist), kann vom Programmiergerät (gesteuert durch die MPLAB-IDE oder durch die Software PICkit 2 Programmer ) auf 0 oder 1 gesetzt werden. Wenn du die IDE MPLAB verwendest, dann musst du um den Ausgang hochohmimg zu machen im Menupunkt Programmer / Settings die Option 3-state on Release from Reset aktivieren. Du musst natürlich auch sicherstellen, dass tatsächlich ein Release from Reset durchgeführt wird. (Menüpunkt Programmer / Release from Reset). Lothar Kerbl Seite 6 (24)

7 bcf STATUS,RP0 Wahl der BANK "2" (Register ANSEL) movlw B' ' movwf ANSEL Port A wird als Eingang definiert, die unteren vier Bit von Port C werden als Ausgang definiert bcf STATUS,RP1 bsf STATUS,RP0 Wahl der Bank "1" (Register TRISA,TRISC) movlw B' ' movwf TRISA movlw B' ' movwf TRISC auf "OUTPUT" setzen Umspeichern der Eingangswerte (Potentiometer und Taster von PORT A) auf die LEDs (PORT C) bcf STATUS,RP1 bcf STATUS,RP0 Wahl der Bank "0" (Register PORTA, PORTC) Loop: movf movwf goto PORTA,w PORTC Loop end Fragen Wie sieht das zugehörige Flussdiagramm aus? Warum werden Abfrage und Ausgabe in einer Schleife ausgeführt? Wie oft wird die Schleife in einer Sekunde ausgeführt? Wie sieht das ESB (die Charakteristik ) eines Digitalausganges für Ausgabewert 1 ( Ausgangskennlinie ) eines Digitalausganges für Ausgabewert 0 ( Ausgangskennlinie ) eines Digitaleinganges ( Stromaufnahme, Schaltschwelle bzw. Hysterese) aus (Datenblatt bzw. Versuch) Erfassen von Analogwerten Im folgenden Programm werden die beiden höchstwertigen Bits einer ADC- Umsetzung an den LEDs DS0 und DS1 angezeigt. Aus dem Stromlaufplan entnehmen wir: Am Pin RA0 kann die Spannung durch das Potentiometer RP1 eingestellt werden. #include <p16f690.inc> config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF) org 0x000 banksel TRISC movlw B' ' movwf TRISC Definiere Digital-Leitungen (LEDs) als Ausgang banksel ADCON1 movlw B' ' movwf ADCON1 definiere Quelle für ADC-Takt banksel TRISA bsf TRISA,0 Definiere RA0 als Eingang ("1") banksel ANSEL bsf ANSEL,0 definiere Analog Eingang auf RA0 Lothar Kerbl Seite 7 (24)

8 banksel ADCON0 movlw B' ' movwf ADCON0 definiere "right justified" Referenzspannung = VDD Kanal AN0 ADC enable Loop: banksel ADCON0 bsf ADCON0,1 Starten des ADC durch Setzen des "GO"-Bits ADC_Warten: btfsc ADCON0,1 busy waiting, bis d. AD-Umsetzung beendet ist.. goto ADC_Warten...solange das Bit "1" ist,läuft die Umsetzung... ADC_Fertig: jetzt liegt das ADC-Ergebnis vor... movf ADRESH,w höchstwertige Bits der AD-Umsetzung (AD-Result) banksel PORTC movwf PORTC die höchstwertigen zwei Bits -> LEDs goto Loop.. erneut ADC-Umwandlung starten (Endlosschleife) end Bei dem Befehl banksel (Bank selection) handelt es sich um ein sogenanntes Assemblermakro : Zur Auswahl einer Speicherbank müssen die beiden Bits RP0 und RP1 im STATUS-Register richtig gesetzt/gelöscht werden (siehe die Programme zum Setzen und Lesen von Digitalen Ausgängen/Eingängen). Als Erleichterung für den Programmierer können die dafür notwendigen beiden Befehle mit abgekürzter Schreibweise in den Assembler Source Code eingefügt werden. Außerdem muss der Programmierer nicht die geeignete Nummer der Registerbank nachschlagen. Im Assemblerlisting oder im Program Memory siehst du den tatsächlich produzierten (Assembler) Code. Wie sieht das zu diesem Programm gehörige Flussdiagramm aus? Zwischen welchen Spannungswerten kann eine Eingangsspannung verarbeitet werden? Welcher Strom wird von einem Digital(Analog)eingang aufgenommen? Aus wievielen Stellen besteht das Ergebnis der AD-Umsetzung? Wo wird dieses Ergebnis gespeichert? Lothar Kerbl Seite 8 (24)

9 Ereignisgesteuertes Programmieren Digitale Eingänge - Interrupt on Port Change Bei den ersten Microcontrollerprogrammen haben wir auf Interrupts verzichtet. Um Eingänge zu erfassen wurde die Umgebung in einer Endlosschleife dauernd abgefragt und im Kontext der Schleife wurden entsprechende Aktionen durchgeführt. Anstelle einer dauernden Abfrage kann der Zustand der Umgebung auch durch Auslösen eines Unterbrechungsereignisses ( Interrupt ) und einer zugehörigen Interrupt Service Routine (ISR) vom Microcontroller bearbeitet werden. Aufgabe: Beim Drücken und Loslassen des Tasters soll ereignisgesteuert zwischen LED0 und LED1 umgeschalten werden. 2 #include <p16f690.inc> config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF) RESET: ORG 0x0000 an dieser Adresse MUSS die RESET-Routine stehen goto STARTUP ORG 0x0004 an dieser Adresse MUSS die ISR stehen INTERRUPT: goto ISR ORG 0x0005 STARTUP: die folgenden Befehle werden nach dem RESET ausgeführt. PORT A - Bit 0..3:"Digital I/O" Analog Funktion deaktivieren)... banksel ANSEL movlw B' ' movwf ANSEL Port A:Eingang Port C: die unteren vier Bits: Ausgang... banksel TRISA movlw B' ' movwf TRISA Port A... "INPUT" movlw B' ' movwf TRISC Port C... "OUTPUT" Interruptfunktionen definieren... (INTCON ist in allen Bänken sichtbar) movlw B' ' GIE = 0, PEIE=0 T01E=0,INTE=0,RABIE=1 Flags löschen movwf INTCON "Interrupt on Change" für RA3 und RA0 aktivieren... banksel IOCA movlw B' ' movwf IOCA Merker initialisieren 0x70..0x7F sind in allen Bänken gleich bcf 0x70,0 Merker wird später bei jedem Interrupt "getoggelt" LEDs initialisieren (LED leuchtet nach RESET)... banksel PORTC movlw B' ' movwf PORTC..auf Port C (LEDs) schreiben INTERRUPT FREIGEBEN bsf INTCON,GIE GIE = 1 Interrupts AKTIVIEREN 2 Du musst vor Ausführung dieses Programmes sicherstellen, dass die PICkit 2 - Hardware das Target den Reset am Eingang RA3 (/MCLR) freigibt (Programmer / Release from Reset) und in hochohmigen Zustand schaltet. (Programmer / Settings / 3state on Release from Reset ) Lothar Kerbl Seite 9 (24)

10 Schleife: ENDLOSSCHLEIFE sleep warten auf den Interrupt... goto Schleife... der Befehl NACH der ISR ISR: das ist die Fortsetzung der INTERRUPTSERVICEROUTINE (ISR) der folgende Programmteil wird nur ausgeführt, wenn durch GP3 ein Interrupt ausgelöst wurde der Programmteil wird im Kontext der Interruptbearbeitung ausgeführt btfss 0x70,0 Teste den "Toggle-Merker" goto IsZero IsOne: Merker ist gesetzt... bcf 0x70,0... deshalb Merker löschen... movlw B' ' LED-Muster einstellen... goto Ausgabe IsZero: Merker ist gelöscht... bsf 0x70,0... deshalb Merker setzen... movlw B' ' LED-Muster einstellen... Ausgabe: banksel PORTC movwf PORTC.. LED-Muster auf Port C schreiben Anstehende Interruptbedingung löschen (durch Zugriff auf Port A und RABIF:=0) movf PORTA bcf INTCON,RABIF erneutes Aktivieren des Interrupts RABIE:=1, GIE:=1 bsf INTCON,RABIE retfie damit wird automatisch GIE:=1 END Wenn du anstelle mit dem Taster SW1 durch Aufprägen der Massepotentials auf den Pin RA3 den Interrupt auslöst, kommt es oft vor, dass zweimal (oder sogar öfter) umgeschalten wird. Der Grund ist Schalterprellen. Das bewirkt, dass beim Aufbringen bzw. Wegschalten des GND-Potentials mehrere aufeinanderfolgende Interrupts ausgelöst werden. Jeder dieser Interrupts löst die Interrupt Service Routine (ISR) erneut aus und bewirkt damit einen Wechsel der aktivierten LED. Durch Prellen werden mehrere Interrupts ausgelöst. Durch das Ausführen einer ISR ist die Interruptbedingung noch nicht automatisch beseitigt. Wenn in einer ISR z.b. nur der Befehl RETFIE ausgeführt wird, bleibt die Interruptbedingung bestehen, und die ISR würde nach Ausführen des Befehls RETFIE sofort wieder ausgeführt werden. Der Befehl RETFIE setzt nämlich automatisch das GIE-Bit wieder auf 1 und damit sind aktivierte Interrupts wieder freigegeben. Die Interruptbedingung für einen Interrupt on Port Change kann nur durch Zugriff auf das PORTA-Register und durch Rücksetzen des Interrupt Flags quittiert und damit zum Verschwinden gebracht werden. Das ist zum Beispiel durch folgende Befehle (die im Kontext der ISR ausgeführt werden müssen) möglich: movf PORTA Lesen oder Schreiben auf das Register GPIO bcf INTCON,RABIF Löschen des Interruptflags GPIF Aufgabenstellungen: Wie lange dauert die Ausführung der ISR? Zu wie viel Prozent ist die CPU zeitmäßig ausgelastet, wenn du annimmst, dass du zwei mal pro Sekunde den Taster betätigst. ( Ausgelastet bedeutet, dass die ISR Routine ausgeführt wird) Wie muss das Programm geändert werden, sodass nur ein Druck auf den Taster das Umschalten zwischen den beiden LEDs bewirkt. (Das Loslassen des Tasters soll ohne Wirkung bleiben) Lothar Kerbl Seite 10 (24)

11 Wie muss das Programm geändert werden, sodass nur jeder zweite Druck auf den Taster das Umschalten zwischen den LEDs bewirkt. (Das Loslassen des Tasters soll ohne Wirkung bleiben) Zugriffe auf das EEPROM Das folgende Programm schaltet auf Tastendruck zwischen zwei LEDs um. Wird die Versorgungsspannung abgeschalten, so bleibt der letzte Zustand erhalten, d.h. nach erneutem Einschalten der Versorgungsspannung erscheint das LED Muster, das beim Abschalten gerade aktuell war. #include <p16f690.inc> config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF) RESET: ORG 0x0000 an dieser Adresse MUSS die RESET-Routine stehen GOTO STARTUP ORG 0x0004 an dieser Adresse MUSS der Beginn der ISR stehen INTERRUPT: GOTO ISR ORG 0x0005 STARTUP: die folgenden Befehle werden nach dem RESET ausgeführt. PORT A - Bit 0..3:"Digital I/O" Analog Funktion deaktivieren)... banksel ANSEL movlw B' ' movwf ANSEL movlw B' ' Port A:Eingang Port C: die unteren vier Bits: Ausgang... banksel TRISA movlw B' ' movwf TRISA Port A... "INPUT" movlw B' ' movwf TRISC Port C... "OUTPUT" LEDs ENTSPRECHEND PERMANENTEN "MERKER" im EEPROM initialisieren... call SchreibeLED Interruptfunktionen definieren Interruptfunktionen definieren... (INTCON ist in allen Bänken sichtbar) movlw B' ' GIE = 0, PEIE=0 T01E=0,INTE=0,RABIE=1 Flags löschen movwf INTCON "Interrupt on Change" für RA3 aktivieren... banksel IOCA movlw B' ' movwf IOCA bsf INTCON,GIE GIE: = 1 Interrupts aktivieren Schleife: ENDLOSSCHLEIFE sleep warten auf den Interrupt... goto Schleife... der Befehl NACH der ISR INTERRUPTSERVICEROUTINE ISR: das ist die Fortsetzung der INTERRUPTSERVICEROUTINE (ISR) der folgende Programmteil wird nur ausgeführt, wenn durch GP3 ein Interrupt ausgelöst wurde call AendereMerker call SchreibeLED Interruptflags löschen (durch Lesen von PORT A RABIF:=0)... banksel PORTA movf PORTA bcf INTCON,RABIF retfie GIE wird durch RETFIE auf 1 gesetzt Lothar Kerbl Seite 11 (24)

12 UNTERPROGRAMME AendereMerker: der Inhalt der Speicherstelle 0x00 im EEPROM wird hochgezählt Hinweis: Da diese Routine NUR im Kontext der ISR ausgeführt wird, sind die Interrupts ohnenhin sicher gesperrt "im Normalfall" müssten während des Schreibvorganges auf das EEPROM die Interrupts gesperrt werden. (siehe die kursiv gedruckten auskommentierten Zeilen Lesen des Inhalts... banksel EEADR movlw 0x00 Adresse im EEPROM... movwf EEADR..vorgeben banksel EECON1 lesender Zugriff auf den EEPROM Datenspeicher bcf EECON1,EEPGD bsf EECON1,RD..Zugriffsart "Lesen" von EEPROM banksel EEDAT incf EEDAT Erhöhen des EEPROM gespeicherten Wertes Zurückschreiben des invertierten Wertes in den EEPROM-Datenspeicher... banksel EECON1 bcf EECON1,EEPGD bsf EECON1,WREN bcf INTCON,GIE Interrupts "im Normalfall" ab nun sperren!!! movlw 0x55 "required uninterruptable sequence" movwf EECON2 "required uninterruptable sequence" movlw 0xAA "required uninterruptable sequence" movwf EECON2 "required uninterruptable sequence" bsf EECON1,WR "required uninterruptable sequence" START SCHREIBEN bsf INTCON,GIE Interrupts "im Normalfall" ab nun wieder zulassen!!! bcf EECON1,WREN..erneutes Starten von Schreiben verhindern banksel PIR2.. Peripheral Interrupt-Register Warten: "busy waiting" bis Schreibvorgang beendet ist btfss PIR2,EEIF Flag testen, ob Schreibvorgang fertig ist goto Warten ->das Flag ist noch nicht gesetzt.. FertigGeschrieben: bcf PIR1,EEIF das Flag muss gelöscht werden RETURN SchreibeLED: je nach Inhalt des Merkers im EEPROM wird entspr. LED-Muster eingeschalten banksel EEADR Lesen aus EEPROM (EEADR, EECON1,EEDATA) movlw 0x00 Adresse im EEPROM... movwf EEADR banksel EECON1 bsf EECON1,RD..Zugriff "Lesen" banksel EEDATA movf EEDATA,w Inhalt der Speicherstelle des EEPROM... banksel PORTC movwf PORTC.. auf PORTC schreiben return end In diesem Programm wird im Kontext der Interrupt Service Routine (ISR) auf das EEPROM geschrieben. Dieser Schreibvorgang und damit die Warteschleife ( busy waiting ) - dauert sehr lang (laut Originaldokumentation typisch 5ms). Dementsprechend lang dauert auch die Ausführung der gesamten Interrupt Service Routine (ISR). Die Warteschleife wird etwa 5ms lang ausgeführt Kontrollfrage: Welcher Anteil (in %) der Ausführungszeit der Interrupt Service Routine wird durch busy waiting auf den Abschluss des EEPROM-Schreibvorganges verbraucht? Busy Waiting : Warteschleife, bis ein Ereignis eintrifft Lothar Kerbl Seite 12 (24)

13 Zeitgeber Oft benötigst du einen einfachen Frequenzgenerator. Im folgenden Programm wird durch den Zeitgeber Timer0 in regelmäßigen Abständen ein Interrupt ausgelöst. Die Frequenz kannst du durch Verändern des Startwertes, den du in das Register TMR0 bzw. in den Prescaler schreibst, einstellen Timer : Der Interrupt wird nach einer vorgegebenen Anzahl von internen Zeitschritten ausgelöst. #include <p16f690.inc> config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF) RESET: GOTO STARTUP ORG 0x0004 an dieser Adresse MUSS die ISR stehen INTERRUPT: GOTO ISR ORG 0x0005 STARTUP: die folgenden Befehle werden nach dem RESET ausgeführt. ADC-Funktion für Pins AUSschalten (siehe Dokumentation) banksel ANSEL MOVLW B' ' kein Analog Eingang MOVWF ANSEL Richtung des benötigten Digital I/O definieren banksel TRISC MOVLW B' ' MOVWF TRISC.. und auf das Richtungsregister schreiben Interruptfunktionen definieren... banksel OPTION_REG MOVLW B' ' --interner Takt-Prescaler f.tmr0prescaler Rate MOVWF OPTION_REG.. in das Option Register schreiben Merker initialisieren... clrf 0x70 Merker wird später bei jedem Interrupt weitergezählt bcf INTCON,T0IF Interrupt Flag löschen bsf INTCON,T0IE Interrupt aktivieren bsf INTCON,GIE Schleife: ENDLOSSCHLEIFE GOTO Schleife SLEEP würde Timer0 deaktivieren ISR: das ist die Fortsetzung der INTERRUPTSERVICEROUTINE (ISR) der folgende Programmteil wird ausgeführt, wenn durch den Überlauf des Timer0 ein Interrupt ausgelöst wurde incf 0x70 movf 0x70,w Inhalt des Merkers. banksel PORTC movwf PORTC auf die LED-Anzeige schreiben Interruptflags löschen und Interrupts wieder "aktivieren"... banksel TMR0 clrf TMR0 in das Timerregister schreiben bsf INTCON,T0IE bcf INTCON,T0IF RETFIE GIE=1 end Du kannst in der ISR den Startwert für den Zähler natürlich jedes Mal mit einem neuen Wert initialisieren. Insbesondere kannst du für die beiden Fälle Merker ist eine gerade Zahl und Merker ist eine ungerade Zahl verschiedene Werte vorsehen, die von anderen Programmteilen beeinflusst werden können. So kannst du durch Programmierung deinem ausgegebenen Digitalsignal verschiedene Eigenschaften verleihen: Lothar Kerbl Seite 13 (24)

14 PFM-Signal - Frequenzmoduliertes Signal PWM-Signal - Pulsweitenmoduliertes Signal PPM-Signal - Pulsphasenmoduliertes Signal (Signalfrequenz ist konstant!) Aufgabe: Wie muss die ISR für ein PFM, PWM und ein PPM-Signal programmiert werden? Welche Variable müssen dabei verwendet werden? Welche Grenzfrequenzen (Maximal, Minimal) und welche Auflösungen des Tastverhälnisses bzw. der Phasenlage eines PPM-Signales sind dabei jeweils erreichbar? Zähler Flanken am Eingang RA2/T0CKI können im Register TMR0 gezählt werden bei Überlauf des Zählers (Übergang von 0xFF auf 0x00) wird ein Interrupt ausgelöst. Der Anfangswert des Zählers (TMR0) und ein Prescaler können gesetzt werden gesetzt werden. #include <p16f690.inc> config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF) Counter : Der Interrupt wird nach einer vorgegebenen Anzahl von externen Zählereignissen ausgelöst. RESET: GOTO STARTUP ORG 0x0004 an dieser Adresse MUSS die ISR stehen INTERRUPT: GOTO ISR ORG 0x0005 STARTUP: die folgenden Befehle werden nach dem RESET ausgeführt. ADC-Funktion für Pins AUSschalten (siehe Dokumentation) banksel ANSEL MOVLW B' ' kein Analog Eingang MOVWF ANSEL Definition der Ausgänge (LEDs) banksel TRISC MOVLW B' ' MOVWF TRISC.. in das Richtungsregister schreiben Interruptfunktionen definieren... banksel OPTION_REG MOVLW B' ' Pull-Up aktiv-externe ZÄHLPULSE steigende FlankePrescaler f.tmr0prescaler Rate -> 1:1 MOVWF OPTION_REG.. in das Option Register schreiben Merker initialisieren... clrf 0x70 Merker wird später bei jedem Interrupt weitergezählt banksel TMR0 Initialisieren des Zählerregisters.. movlw 0xF8... noch 8 Zählpulse bis Überlauf FF->00 und... movwf TMR0... damit zum Auslösen des Interrupts bcf INTCON,T0IF Interrupt Flag löschen bsf INTCON,T0IE Interrupt aktivieren bsf INTCON,GIE Schleife: ENDLOSSCHLEIFE GOTO Schleife SLEEP würde Timer0 deaktivieren ISR: das ist die Fortsetzung der INTERRUPTSERVICEROUTINE (ISR) der folgende Programmteil wird ausgeführt, wenn durch den Überlauf des Registers TMR0 (0xFF-> 0x00) ein Interrupt ausgelöst wurde incf 0x70 Merker weiterzählen movf 0x70,w banksel PORTC movwf PORTC auf die LED-Anzeige schreiben Zählerregister (wieder) auf den Startwert setzen... banksel TMR0 movlw 0xF8... noch 8 Zählpulse bis zum Überlauf FF->00... movwf TMR0 Interruptflags löschen und Interrupts wieder "aktivieren"... bsf INTCON,T0IE bcf INTCON,T0IF RETFIE GIE=1 end Lothar Kerbl Seite 14 (24)

15 Welche Spannung an einem Digitaleingang wird als 0 erkannt, welche als 1? Welche Wirkung hat der Pull up Widerstand, der im OPTION_REG (RABPU) und in den Registern WPUA bzw. WPUB aktiviert werden kann? Wie (warum) vereinfacht sich die Ansteuerung eines Digitaleinganges, wenn ein interner Pull up Widerstand verwendet wird? Komparator Regler arbeiten meist als Zwei- oder Mehrpunktregler (mit oder ohne Hysterese). Eine solche Reglerfunktionen lässt sich durch die Komparatorfunktion des PIC Microcontrollers realisieren. Bei solchen diesen Reglern wird ein Digitaler Ausgang geschaltet, und zwar dann, wenn ein (analoger) Eingangswert eine Schaltschwelle überschreitet. Die Schaltschwelle kann durch einen weiteren (analogen) Eingangswert oder durch einen fest vorgegeben Wert definiert sein. Der PIC-Microcontroller kann diese Komparatorfunktion ausführen, mit dem Auftreten des Schaltereignisses kann eine Interrupt Service Routine verbunden werden, der Schaltzustand kann direkt an einem Ausgang C1OUT bzw. C2OUT abgebildet werden kann. Beispiel Zweipunktregler mit Hysterese: Der Istwert wird durch die analoge Spannung (Analog Eingang V ) vorgegeben, die Schaltschwelle ist durch einen fixen Wert (entsprechend 3,0V) vorgegeben. Die Gesamtbreite der Hysterese soll 500 mv betragen. Die Hysterese ist symmetrisch zur Schaltschwelle und nicht veränderbar. Nach Reset ist der Ausgang bevorzugt ausgeschaltet 3. Hinweis: Bei jedem Aufruf der ISR muss die Schaltschwelle entsprechend der Hysterese neu parametriert werden, bei einem Zweipunktregler ohne Hysterese (Hysteresebreite = 0) kann auf die Verwendung einer ISR verzichtet werden. Erweiterte Aufgabenstellung: Wie könnte man die Vorgabe der Schaltschwelle durch einen weiteren analogen Eingangswert verändern? Wie könnte man durch Druck auf einen Taster vorübergehend die Hysterese ausschalten ( Zweipunktregler ohne Hysterese ) Wie ist ein Dreipunktregler mit Hysterese zu programmieren? Welche Parameter müssen bei dieser Reglerart als Parameter berücksichtigt werden? Wie ist die ISR zu programmieren? 3 Dies gilt für den Fall, dass der Istwert im Bereich der Hysterese um die Schaltschwelle liegt. Lothar Kerbl Seite 15 (24)

16 Anhang Configuration Bits Ein Teil des Programmspeicherbereiches kann nicht mit ausführbarem Code belegt werden. (Adresse 0x2007) In diesem Bereich werden Grundeinstellungen für die Arbeitsweise des Microcontrollers festgelegt. Zwei dieser Einstellungen betreffen die Verwendung des Taktsignales und die Behandlung der RESET-Funktion Taktsignal Die umfangreiche Logik eines Microcontrollers kann nur als synchrones Schaltwerk entworfen und realisiert werden. Zu dessen Ansteuerung ist ein zentraler Takt notwendig, der auf verschiedene Arten zur Verfügung gestellt werden kann: 1. Der Microcontroller ist Teil einer umfangreicheren Schaltung und kann mit einem vorhandenen Takt versorgt werden. ( external clock in-ec ) 2. Um eine genau definierte Frequenz erzeugen zu können, kann die Frequenz durch ein frequenzbestimmendes Element und zwei Kondensatoren eingestellt werden. ( crystal oscillator, ceramic resonator - LP, XT, HS ) 3. Wenn die Frequenz für die Arbeitsweise von untergeordneter Bedeutung ist, kann sie durch einen Kondensator und einen Widerstand vorgegeben werden ( external Resistor/Capacitor RC ) 4. Wenn man mit einer vorgegebenen Frequenz von 4MHz das Auslangen findet, kann man den internen 4 MHz Oszillator nutzen ( internal oscillator INTOSC ) Die Auswahl der Betriebsart, die natürlich mit der Beschaltung zusammenpassen muss, geschieht durch Vorgabe der Configuration Bits FOSC0, FOSC1, FOSC2 Reset Das Programm wird an der Adresse 0 gestartet, wenn eine der folgenden Bedingungen eintritt: 1. Power up Reset Wenn die Versorgungsspannung einen gewissen Wert überschreitet, wird das Programm an der Adresse 0 gestartet 2. Brown Out Wenn die Versorgungsspannung einen bestimmten Wert unterschreitet tritt der sog. Brown out Zustand ein. Wenn nach diesem Brown out Zustand die Versorgungsspannung wieder stabil ist, wird das Programm an der Adresse 0 begonnen. 3. Master Clear Durch das Eingangssignal MCLR kann ein Reset ausgelöst werden Lothar Kerbl Seite 16 (24)

17 4. Watch Dog Timer unabhängig von laufenden Programmen kann durch einen Watch Dog ein Programmabsturz erkannt und durch ein Reset beantwortet warden. Der Watch Dog wird durch die Befehle SLEEP und CLRWDT wieder nachgestellt. Um zu erkennen, welcher dieser Gründe den Programmstart ausgelöst hat, muss der Inhalt des Power Control Registers (PCON) im Programmcode, der nach nach einem Reset erfolgt, überprüft werden. Die Datei P16F690.INC LIST P16F690.INC Standard Header File, Version 1.00 Microchip Technology, Inc. NOLIST This header file defines configurations, registers, and other useful bits of information for the PIC16F690 microcontroller. These names are taken to match the data sheets as closely as possible. Note that the processor must be selected before this file is included. The processor may be selected the following ways: 1. Command line switch: C:\ MPASM MYFILE.ASM /PIC16F LIST directive in the source file LIST P=PIC16F Processor Type entry in the MPASM full-screen interface ========================================================================== Revision History ========================================================================== /12/04 Original ========================================================================== Verify Processor ========================================================================== IFNDEF 16F690 MESSG "Processor-header file mismatch. Verify selected processor." ENDIF ========================================================================== Register Definitions ========================================================================== W EQU H'0000' F EQU H'0001' Register Files INDF EQU H'0000' TMR0 EQU H'0001' PCL EQU H'0002' STATUS EQU H'0003' FSR EQU H'0004' PORTA EQU H'0005' PORTB EQU H'0006' PORTC EQU H'0007' PCLATH EQU H'000A' INTCON EQU H'000B' PIR1 EQU H'000C' PIR2 EQU H'000D' TMR1L EQU H'000E' TMR1H EQU H'000F' T1CON EQU H'0010' TMR2 EQU H'0011' T2CON EQU H'0012' SSPBUF EQU H'0013' SSPCON EQU H'0014' CCPR1L EQU H'0015' CCPR1H EQU H'0016' CCP1CON EQU H'0017' RCSTA EQU H'0018' TXREG EQU H'0019' RCREG EQU H'001A' PWM1CON EQU H'001C' ECCPAS EQU H'001D' Lothar Kerbl Seite 17 (24)

18 ADRESH EQU H'001E' ADCON0 EQU H'001F' OPTION_REG EQU H'0081' TRISA EQU H'0085' TRISB EQU H'0086' TRISC EQU H'0087' PIE1 EQU H'008C' PIE2 EQU H'008D' PCON EQU H'008E' OSCCON EQU H'008F' OSCTUNE EQU H'0090' PR2 EQU H'0092' SSPADD EQU H'0093' MSK EQU H'0093' SSPMSK EQU H'0093' SSPSTAT EQU H'0094' WPU EQU H'0095' WPUA EQU H'0095' IOC EQU H'0096' IOCA EQU H'0096' WDTCON EQU H'0097' TXSTA EQU H'0098' SPBRG EQU H'0099' SPBRGH EQU H'009A' BAUDCTL EQU H'009B' ADRESL EQU H'009E' ADCON1 EQU H'009F' EEDAT EQU H'010C' EEDATA EQU H'010C' EEADR EQU H'010D' EEDATH EQU H'010E' EEADRH EQU H'010F' WPUB EQU H'0115' IOCB EQU H'0116' VRCON EQU H'0118' CM1CON0 EQU H'0119' CM2CON0 EQU H'011A' CM2CON1 EQU H'011B' ANSEL EQU H'011E' ANSELH EQU H'011F' EECON1 EQU H'018C' EECON2 EQU H'018D' PSTRCON EQU H'019D' SRCON EQU H'019E' BANK 0 REGISTER DEFINITIONS STATUS Bits IRP EQU H'0007' RP1 EQU H'0006' RP0 EQU H'0005' NOT_TO EQU H'0004' NOT_PD EQU H'0003' Z EQU H'0002' DC EQU H'0001' C EQU H'0000' INTCON Bits GIE EQU H'0007' PEIE EQU H'0006' T0IE EQU H'0005' INTE EQU H'0004' RABIE EQU H'0003' T0IF EQU H'0002' INTF EQU H'0001' RABIF EQU H'0000' PIR1 Bits ADIF EQU H'0006' RCIF EQU H'0005' TXIF EQU H'0004' SSPIF EQU H'0003' CCP1IF EQU H'0002' T2IF EQU H'0001' TMR2IF EQU H'0001' Lothar Kerbl Seite 18 (24)

19 T1IF EQU H'0000' TMR1IF EQU H'0000' PIR2 Bits OSFIF EQU H'0007' C2IF EQU H'0006' C1IF EQU H'0005' EEIF EQU H'0004' T1CON Bits T1GINV EQU H'0007' TMR1GE EQU H'0006' T1CKPS1 EQU H'0005' T1CKPS0 EQU H'0004' T1OSCEN EQU H'0003' NOT_T1SYNC EQU H'0002' TMR1CS EQU H'0001' TMR1ON EQU H'0000' T2CON Bits TOUTPS3 EQU H'0006' TOUTPS2 EQU H'0005' TOUTPS1 EQU H'0004' TOUTPS0 EQU H'0003' TMR2ON EQU H'0002' T2CKPS1 EQU H'0001' T2CKPS0 EQU H'0000' SSPCON Bits WCOL EQU H'0007' SSPOV EQU H'0006' SSPEN EQU H'0005' CKP EQU H'0004' SSPM3 EQU H'0003' SSPM2 EQU H'0002' SSPM1 EQU H'0001' SSPM0 EQU H'0000' CCP1CON Bits P1M1 EQU H'0007' P1M0 EQU H'0006' DC1B1 EQU H'0005' DC1B0 EQU H'0004' CCP1M3 EQU H'0003' CCP1M2 EQU H'0002' CCP1M1 EQU H'0001' CCP1M0 EQU H'0000' RCSTA Bits SPEN EQU H'0007' RX9 EQU H'0006' SREN EQU H'0005' CREN EQU H'0004' ADDEN EQU H'0003' FERR EQU H'0002' OERR EQU H'0001' RX9D EQU H'0000' PWM1CON Bits PRSEN EQU H'0007' PDC6 EQU H'0006' PDC5 EQU H'0005' PDC4 EQU H'0004' PDC3 EQU H'0003' PDC2 EQU H'0002' PDC1 EQU H'0001' PDC0 EQU H'0000' ECCPAS Bits ECCPASE EQU H'0007' ECCPAS2 EQU H'0006' ECCPAS1 EQU H'0005' ECCPAS0 EQU H'0004' PSSAC1 EQU H'0003' PSSAC0 EQU H'0002' PSSBD1 EQU H'0001' PSSBD0 EQU H'0000' ADCON0 Bits ADFM EQU H'0007' Lothar Kerbl Seite 19 (24)

20 VCFG EQU H'0006' CHS3 EQU H'0005' CHS2 EQU H'0004' CHS1 EQU H'0003' CHS0 EQU H'0002' GO EQU H'0001' NOT_DONE EQU H'0001' GO_DONE EQU H'0001' ADON EQU H'0000' BANK 1 REGISTER DEFINITIONS OPTION Bits NOT_RABPU EQU H'0007' INTEDG EQU H'0006' T0CS EQU H'0005' T0SE EQU H'0004' PSA EQU H'0003' PS2 EQU H'0002' PS1 EQU H'0001' PS0 EQU H'0000' TRISA Bits TRISA5 EQU H'0005' TRISA4 EQU H'0004' TRISA3 EQU H'0003' TRISA2 EQU H'0002' TRISA1 EQU H'0001' TRISA0 EQU H'0000' TRISB Bits TRISB7 EQU H'0007' TRISB6 EQU H'0006' TRISB5 EQU H'0005' TRISB4 EQU H'0004' TRISC Bits TRISC7 EQU H'0007' TRISC6 EQU H'0006' TRISC5 EQU H'0005' TRISC4 EQU H'0004' TRISC3 EQU H'0003' TRISC2 EQU H'0002' TRISC1 EQU H'0001' TRISC0 EQU H'0000' PIE1 Bits ADIE EQU H'0006' RCIE EQU H'0005' TXIE EQU H'0004' SSPIE EQU H'0003' CCP1IE EQU H'0002' T2IE EQU H'0001' TMR2IE EQU H'0001' T1IE EQU H'0000' TMR1IE EQU H'0000' PIE2 Bits OSFIE EQU H'0007' C2IE EQU H'0006' C1IE EQU H'0005' EEIE EQU H'0004' PCON Bits ULPWUE EQU H'0005' SBOREN EQU H'0004' NOT_POR EQU H'0001' NOT_BOR EQU H'0000' OSCCON Bits IRCF2 EQU H'0006' IRCF1 EQU H'0005' IRCF0 EQU H'0004' OSTS EQU H'0003' HTS EQU H'0002' LTS EQU H'0001' SCS EQU H'0000' OSCTUNE Bits TUN4 EQU H'0004' TUN3 EQU H'0003' Lothar Kerbl Seite 20 (24)

21 TUN2 EQU H'0002' TUN1 EQU H'0001' TUN0 EQU H'0000' SSPSTAT Bits SMP EQU H'0007' CKE EQU H'0006' D EQU H'0005' I2C_DATA EQU H'0005' NOT_A EQU H'0005' NOT_ADDRESS EQU H'0005' D_A EQU H'0005' DATA_ADDRESS EQU H'0005' P EQU H'0004' I2C_STOP EQU H'0004' S EQU H'0003' I2C_START EQU H'0003' R EQU H'0002' I2C_READ EQU H'0002' NOT_W EQU H'0002' NOT_WRITE EQU H'0002' R_W EQU H'0002' READ_WRITE EQU H'0002' UA EQU H'0001' BF EQU H'0000' WPUA Bits WPUA5 EQU H'0005' WPUA4 EQU H'0004' WPUA2 EQU H'0002' WPUA1 EQU H'0001' WPUA0 EQU H'0000' IOC Bits IOC5 EQU H'0005' IOC4 EQU H'0004' IOC3 EQU H'0003' IOC2 EQU H'0002' IOC1 EQU H'0001' IOC0 EQU H'0000' IOCA Bits IOCA5 EQU H'0005' IOCA4 EQU H'0004' IOCA3 EQU H'0003' IOCA2 EQU H'0002' IOCA1 EQU H'0001' IOCA0 EQU H'0000' WDTCON Bits WDTPS3 EQU H'0004' WDTPS2 EQU H'0003' WDTPS1 EQU H'0002' WDTPS0 EQU H'0001' SWDTEN EQU H'0000' TXSTA Bits CSRC EQU H'0007' TX9 EQU H'0006' TXEN EQU H'0005' SYNC EQU H'0004' SENB EQU H'0003' BRGH EQU H'0002' TRMT EQU H'0001' TX9D EQU H'0000' SPBRG Bits BRG7 EQU H'0007' BRG6 EQU H'0006' BRG5 EQU H'0005' BRG4 EQU H'0004' BRG3 EQU H'0003' BRG2 EQU H'0002' BRG1 EQU H'0001' BRG0 EQU H'0000' SPBRGH Bits BRG15 EQU H'0007' BRG14 EQU H'0006' BRG13 EQU H'0005' Lothar Kerbl Seite 21 (24)

22 BRG12 EQU H'0004' BRG11 EQU H'0003' BRG10 EQU H'0002' BRG9 EQU H'0001' BRG8 EQU H'0000' BAUDCTL Bits ABDOVF EQU H'0007' RCIDL EQU H'0006' SCKP EQU H'0004' BRG16 EQU H'0003' WUE EQU H'0001' ABDEN EQU H'0000' ADCON1 Bits ADCS2 EQU H'0006' ADCS1 EQU H'0005' ADCS0 EQU H'0004' BANK 2 REGISTER DEFINITIONS WPUB Bits WPUB7 EQU H'0007' WPUB6 EQU H'0006' WPUB5 EQU H'0005' WPUB4 EQU H'0004' IOCB Bits IOCB7 EQU H'0007' IOCB6 EQU H'0006' IOCB5 EQU H'0005' IOCB4 EQU H'0004' VRCON Bits C1VREN EQU H'0007' C2VREN EQU H'0006' VRR EQU H'0005' VP6EN EQU H'0004' VR3 EQU H'0003' VR2 EQU H'0002' VR1 EQU H'0001' VR0 EQU H'0000' CM1CON0 Bits C1ON EQU H'0007' C1OUT EQU H'0006' C1OE EQU H'0005' C1POL EQU H'0004' C1R EQU H'0002' C1CH1 EQU H'0001' C1CH0 EQU H'0000' CM2CON0 Bits C2ON EQU H'0007' C2OUT EQU H'0006' C2OE EQU H'0005' C2POL EQU H'0004' C2R EQU H'0002' C2CH1 EQU H'0001' C2CH0 EQU H'0000' CM2CON1 Bits MC1OUT EQU H'0007' MC2OUT EQU H'0006' T1GSS EQU H'0001' C2SYNC EQU H'0000' ANSELH Bits ANS11 EQU H'0003' ANS10 EQU H'0002' ANS9 EQU H'0001' ANS8 EQU H'0000' ANSEL Bits ANS7 EQU H'0007' ANS6 EQU H'0006' Lothar Kerbl Seite 22 (24)

23 ANS5 EQU H'0005' ANS4 EQU H'0004' ANS3 EQU H'0003' ANS2 EQU H'0002' ANS1 EQU H'0001' ANS0 EQU H'0000' BANK 3 REGISTER DEFINITIONS EECON1 Bits EEPGD EQU H'0007' WRERR EQU H'0003' WREN EQU H'0002' WR EQU H'0001' RD EQU H'0000' PSTRCON Bits STRSYNC EQU H'0004' STRD EQU H'0003' STRC EQU H'0002' STRB EQU H'0001' STRA EQU H'0000' SRCON Bits SR1 EQU H'0007' SR0 EQU H'0006' C1SEN EQU H'0005' C2REN EQU H'0004' PULSS EQU H'0003' PULSR EQU H'0002' ========================================================================== RAM Definition ========================================================================== MAXRAM H'1FF' BADRAM H'08'-H'09', H'1B' BADRAM H'88'-H'89', H'91', H'9C'-H'9D' BADRAM H'108'-H'109', H'110'-H'114', H'117', H'11C'-H'11D' BADRAM H'188'-H'189', H'18E'-H'19C', H'19F'-H'1EF' ========================================================================== Configuration Bits ========================================================================== _FCMEN_ON EQU H'3FFF' _FCMEN_OFF EQU H'37FF' _IESO_ON EQU H'3FFF' _IESO_OFF EQU H'3BFF' _BOR_ON EQU H'3FFF' _BOR_NSLEEP EQU H'3EFF' _BOR_SBODEN EQU H'3DFF' _BOR_OFF EQU H'3CFF' _CPD_ON EQU H'3F7F' _CPD_OFF EQU H'3FFF' _CP_ON EQU H'3FBF' _CP_OFF EQU H'3FFF' _MCLRE_ON EQU H'3FFF' _MCLRE_OFF EQU H'3FDF' _PWRTE_OFF EQU H'3FFF' _PWRTE_ON EQU H'3FEF' _WDT_ON EQU H'3FFF' _WDT_OFF EQU H'3FF7' _LP_OSC EQU H'3FF8' _XT_OSC EQU H'3FF9' _HS_OSC EQU H'3FFA' _EC_OSC EQU H'3FFB' _INTRC_OSC_NOCLKOUT EQU H'3FFC' _INTRC_OSC_CLKOUT EQU H'3FFD' _EXTRC_OSC_NOCLKOUT EQU H'3FFE' _EXTRC_OSC_CLKOUT EQU H'3FFF' _INTOSCIO EQU H'3FFC' _INTOSC EQU H'3FFD' _EXTRCIO EQU H'3FFE' _EXTRC EQU H'3FFF' LIST Lothar Kerbl Seite 23 (24)

24 Das HEX-Format für Images Wenn du die HEX-Datei, die als Ergebnis der Übersetzungsvorgänge (C-Compiler, Assembler) und des Linkvorganges entstanden ist, mit einem Editor öffnest, könnte die etwa folgendermaßen aussehen: : A006328A AC004C : AD000A08AE008A012B08AF000B19D6 : B1E CD239F140B110B188B1DCA : A031D A1060E :02400E00D430AC...usw In dieser Datei wird der Inhalt des Programmspeichers für das Target System beschrieben. Das Format, in dem der Speicherinhalt in dieser Datei angegeben ist, heißt INTEL- HEX-Format. Das ist ein gebräuchliches Format zur Darstellung und zum Transport von Images für Mikroprozessorsysteme (und auch zur Darstellung von PROM- Inhalten). Jede Zeile ist folgendermaßen aufgebaut. Doppelpunkt : am Beginn der Zeile Die Anzahl der zu ladenden Bytes als zweistellige HEX-Zahl Die Adresse 4, an der die Daten im Target System zu laden sind Angabe über die Art der Daten in der Zeile (normalerweise 00 ) Die Daten d.h. der zu programmierende Inhalt des Programmspeichers wenn du in der IDE MPLAB dasselbe Programm geladen hast, sollten diese Daten mit der Anzeige Program Memory übereinstimmen. Den Inhalt des Programmspeichers kannst du auch mit dem Programm PICkit 2 Programmer überprüfen. Beachte aber, dass die Adressierung in der HEX- Datei byteweise erfolgt, während im Programmspeicher immer 14 Bit unter einer Adresse gespeichert sind. Prüfsumme Beachte, dass auch für die Programmierung der Configuration Bits eine eigene Zeile vorgesehen ist : A006328A AC00 4C : AD000A08AE008A012B08AF000B19 D6 : B1E CD239F140B110B188B1D CA : A031D A106 0E : B C1F C1F57287F30 63 : E E02031C : E 00 D430 AC 4 Wahrscheinlich fällt dir bei genauerem Vergleich auf, dass die Adressen in der HEX-Datei nicht mit der Adressierung im Programmspeicher übereinstimmen. Der Programmspeicher wird beim Programmieren - anders als bei der Programmausführung - mit einer Breite von 8 Bit gesehen. In der Datei sollte auch ein Eintrag für das Configuration Word auf der Programmspeicheradresse 0x2007 (Programmieradresse 0x400E) vorgesehen sein. Lothar Kerbl Seite 24 (24)

Drehimpulsgeber (Dekodierung mit PIC-Mikrocontroller)

Drehimpulsgeber (Dekodierung mit PIC-Mikrocontroller) Drehimpulsgeber (Dekodierung mit PIC-Mikrocontroller) Autor: Buchgeher Stefan Letzte Bearbeitung: 2. März 2004 Inhaltsverzeichnis 1. GRUNDLEGENDES ZUM DREHIMPULSGEBER...3 2. HARDWARE...4 3. SOFTWARE...4

Mehr

2. Einführung/Assembler Programmierung. 2.1 Einführung. 2.1.1 Übersicht

2. Einführung/Assembler Programmierung. 2.1 Einführung. 2.1.1 Übersicht 2. Einführung/Assembler Programmierung Es soll eine einfache Einführung in die Fuktionsweise des PIC16F84A gegeben werden. Anhand eines Beispielprogramms werden einige grundlegende Assemblerbefehle besprochen.

Mehr

Ansteuerung einer (Full- Color)-RGB- Leuchtdiode (mit PIC-Mikrocontroller)

Ansteuerung einer (Full- Color)-RGB- Leuchtdiode (mit PIC-Mikrocontroller) Ansteuerung einer (Full- Color)-RGB- Leuchtdiode (mit PIC-Mikrocontroller) Autor: Buchgeher Stefan Letzte Bearbeitung: 29. März 2004 Inhaltsverzeichnis 1. GRUNDLEGENDES ZUR (FULL-COLOR)-RGB-LEUCHTDIODE...3

Mehr

Remote-Objekt-Überwachung. von Jan Schäfer und Matthias Merk

Remote-Objekt-Überwachung. von Jan Schäfer und Matthias Merk Remote-Objekt-Überwachung von Jan Schäfer und Matthias Merk Aufgabenstellung Steuerung von Sensoren zur Remote Objektüberwachung mit einem µc PIC16F874. Welcher Sensor hat gemeldet? Die Überwachung Mehrere

Mehr

I²C-Routinen (für PIC-Mikrocontroller)

I²C-Routinen (für PIC-Mikrocontroller) I²C-Routinen (für PIC-Mikrocontroller) Autor: Buchgeher Stefan Letzte Bearbeitung: 27. Februar 2004 Inhaltsverzeichnis 1. GRUNDLEGENDES ZU I²C...3 2. I²C-PROTOKOLL...3 3. HARDWARE...5 4. SOFTWARE...5 4.1.

Mehr

0 C (Carry) Überlauf des 8ten Bits. 1 DC (Digit Carry) Überlauf des 4ten Bits. Mnemonic Parameter Beschreibung Status-Flags.

0 C (Carry) Überlauf des 8ten Bits. 1 DC (Digit Carry) Überlauf des 4ten Bits. Mnemonic Parameter Beschreibung Status-Flags. 3. Assembler-Programmierung Der PIC 16F84A Microcontroller kennt 35 verschiedene Befehle. Für eine ausführliche Beschreibung aller Befehle siehe PIC16F84A-Datenblatt Kapitel 7.1. 3.1 Wichtige Flaggen im

Mehr

1. Die alte Schaltung mit C- Mos

1. Die alte Schaltung mit C- Mos Ausgehend von Deinem Vorschlag auf der Homepage www.alpentourer.de habe ich mir einige Gedanken gemacht wie man die Ganganzeige besser aufbauen kann. 1. Die alte Schaltung mit C- Mos Ich habe sie damals

Mehr

Entwicklungsboard 16F1824

Entwicklungsboard 16F1824 Entwicklungsboard 16F1824 Inhaltsverzeichnis 1. Einleitung...2 2. Grundlegende Eigenschaften...2 2.1 Grundlegende Eigenschaften...2 2.2 Optionale Eigenschaften...3 3. Programmierung...3 4. Hardware...5

Mehr

Selbstgebauter, kompakter, Strom sparender, Mehrkanal- Datenlogger mit PICs

Selbstgebauter, kompakter, Strom sparender, Mehrkanal- Datenlogger mit PICs Selbstgebauter, kompakter, Strom sparender, Mehrkanal- Datenlogger mit PICs Wettbewerb "Jugend Forscht" 2008 Lucas Jürgens (12 Jahre) Arbeitsgemeinschaft "Jugend Forscht" des Christian-Gymnasiums Hermannsburg

Mehr

LED Skalenbeleuchtung mit einem Arduino

LED Skalenbeleuchtung mit einem Arduino Projektteil: LED Skalenbeleuchtung mit einem Arduino Aufgaben: - Ein Taster schaltet die LED-Beleuchtung ein - Nach Ablauf einer im Programm hinterlegten Zeit schaltet sich die Beleuchtung von selbst wieder

Mehr

PIC16 Programmierung in HITECH-C

PIC16 Programmierung in HITECH-C PIC16 Programmierung in HITECH-C Operatoren: Arithmetische Operatoren - binäre Operatoren + Addition - Subtraktion * Multiplikation / Division % Modulo + - * / sind auf ganzzahlige und reelle Operanden

Mehr

Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13. Teil 8: gavrasmw und weitere Beispiele

Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13. Teil 8: gavrasmw und weitere Beispiele Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13 Eine Einführung in Aufbau, Funktionsweise, Programmierung und Nutzen von Mikroprozessoren Teil 8: gavrasmw und weitere Beispiele gavrasmw

Mehr

E Mikrocontroller-Programmierung

E Mikrocontroller-Programmierung E Mikrocontroller-Programmierung E Mikrocontroller-Programmierung E.1 Überblick Mikrocontroller-Umgebung Prozessor am Beispiel AVR-Mikrocontroller Speicher Peripherie Programmausführung Programm laden

Mehr

Analog-Digital-Converter

Analog-Digital-Converter Analog-Digital-Converter Funktionsprinzip ADC bei ATmega128 Beispiel in C Funktionsprinzip 1 Analog-Digital-Wandlung Wandelt analoge Spannung / analogen Strom (Messgröße) in einen binären Wert um, der

Mehr

Mikrocontroller in eigenen Hobbyprojekten nutzen

Mikrocontroller in eigenen Hobbyprojekten nutzen PIC-Mikrocontroller Mikrocontroller in eigenen Hobbyprojekten nutzen - Mikrocontroller Definition und Historie - die PIC-Familie - Entwicklungssysteme - Programmierung - Softwareerstellung - Debugging

Mehr

Ansteuerung eines alphanumerischen. Display (mit PIC-Mikrocontroller)

Ansteuerung eines alphanumerischen. Display (mit PIC-Mikrocontroller) Ansteuerung eines alphanumerischen LC- Display (mit PIC-Mikrocontroller) Autor: Buchgeher Stefan Letzte Bearbeitung: 10. Oktober 2004 Inhaltsverzeichnis 1. GRUNDLEGENDES ZUM LC-DISPLAY...4 2. HARDWARE...4

Mehr

PICDEMO88 Übungen für das HTL3R Demoboard

PICDEMO88 Übungen für das HTL3R Demoboard HTL Wien 3 Rennweg Rennweg 89b, A-1030 Wien PICDEMO88 Übungen für das HTL3R Demoboard Gerhard Jüngling Version 2.0 Schuljahr 2010/11 G. Jüngling, PICDEMO88_Uebungen_V2.0.odt, 14. Sep 2010 Seite 1 Inhaltsverzeichnis

Mehr

Assemblerprogrammieren PIC

Assemblerprogrammieren PIC Einführung in die Programmierung von Microchip - PIC Prozessoren Inhaltsverzeichnis Einleitung... 2 Das Programmiermodell des Microchip PIC Prozessors... 2 Übersicht über PIC-Prozessoren... 3 Der Programmspeicher...

Mehr

2

2 TINF Interrupts EDT-Referat Jürgen Schwarzbauer 2ANB 1995/96 Inhalt : Was ist ein Interrupt? Zweck von Interrupts Maskierbare und nicht maskierbare Interrupts Aufruf eines Interrupts Anwendung von Interrupts

Mehr

Ampelsteuerung Merkblatt 2 Wie wird der Arduino programmiert?

Ampelsteuerung Merkblatt 2 Wie wird der Arduino programmiert? 1 Übersicht Für die Programmierung steht ein Programm zur Verfügung. Hier kann der Quelltext geschrieben, überprüft, kompiliert und anschließend auf den Arduino geladen werden. Wenn ihr das Programm startet,

Mehr

Programmierübungen in Assembler

Programmierübungen in Assembler Programmierübungen in Assembler 1. LED Ein-/Ausschalten Verwendet: Ports An Portpin P3.0 ist eine LED angeschlossen. An Portpin P1.0 ist ein Taster angeschlossen. a) Schreiben Sie ein Programm, welches

Mehr

Grundlagen der Programmierung II BMI Bakk.

Grundlagen der Programmierung II BMI Bakk. BMI Bakk. Teil 2 Rainer Schubert Institut für Biomedizinische Bildanalyse Inhalt Aufbau eines µprozessors Grundbegriffe Allgemein PIC16F690 Ports Programmspeicher Datenspeicher RAM, ROM Spezialregister

Mehr

Parallel-IO. Ports am ATmega128

Parallel-IO. Ports am ATmega128 Parallel-IO Ansteuerung Miniprojekt Lauflicht Ports am ATmega128 PortE (PE7...PE0) alternativ, z.b. USART0 (RS232) 1 Pin von PortC Port C (PC7...PC0) 1 Parallel-IO-Port "Sammelsurium" verschiedener Speicher

Mehr

Mikrocontroller für Einsteiger

Mikrocontroller für Einsteiger FRANZIS PC & ELEKTRONIK Michael Hofmann Mikrocontroller für Einsteiger Schaltungen entwerfen und Software programmieren Auf CD-ROM: Beispielprogramme Layoutdaten Schaltpläne Datenblätter 5 Vorwort Mikrocontroller

Mehr

Mini- Mikroprozessor-Experimentier-System. Version 1.0b vom :21. mit einem 8051-Mikrocontroller

Mini- Mikroprozessor-Experimentier-System. Version 1.0b vom :21. mit einem 8051-Mikrocontroller Mini- Mikroprozessor-Experimentier-System mit einem 8051-Mikrocontroller Version 1.0b vom 04.10.2004 14:21 Inhalt 1 Einleitung...3 2 Hardware...4 2.1 Übersicht...4 2.2 Mikrocontroller AT89C51RB2...5 2.3

Mehr

Fuses mit BASCOM und USBASP setzen

Fuses mit BASCOM und USBASP setzen Auch wenn mir dieser Programmteil von BASCOM wenig gefällt und es hübschere Programme zum Setzen der AVR Fusebits gibt, sei's drum. Es gibt immer wieder OM's, die danach fragen. Zugute halten kann man,

Mehr

11. Die PC-Schnittstelle

11. Die PC-Schnittstelle PC-Schnittstelle Funktion -1. Die PC-Schnittstelle.1. Funktion Die folgenden Angaben gelten ohne Einschränkung für den PC, PC-XT, PC-AT, AT-386, AT-486 und kompatible Rechner. Sie sind nur für jene interessant,

Mehr

Bisher hatten immer nur als Ausgänge geschaltet und hierfür folgende Befehle benutzt:

Bisher hatten immer nur als Ausgänge geschaltet und hierfür folgende Befehle benutzt: Tasten abfragen Bisher hatten immer nur als Ausgänge geschaltet und hierfür folgende Befehle benutzt: pinmode(pinnummer, OUTPUT) digitalwrite(pinnummer, HIGH) oder digitalwrite(pinnummer, LOW) Zum Abfragen

Mehr

Data Monitor Anzeige der zuletzt gesendeten bzw. empfangenen Daten

Data Monitor Anzeige der zuletzt gesendeten bzw. empfangenen Daten T9620 / G9620 MIDI GPIO INTERFACE Gerät zur Umsetzung von Midi - Befehlen auf GPIO 8 - GPI Eingänge Option: weitere 8 GPI und 8 GPO 8 - Potentialfreie GPO Ausgänge Status GPIO Statusanzeige der Ein-Ausgänge

Mehr

ATmega169 Chip: Pin-Layout

ATmega169 Chip: Pin-Layout ATmega169 Chip: Pin-Layout Die logische Schnittstelle der Funktionseinheit MCU (Microcontroller Unit) entspricht der physikalischen Schnittstelle der Baueinheit (Chip). Für die Maschinenbefehle sind nur

Mehr

Fachhochschule Kaiserslautern Fachbereich Angewandte Ingenieurwissenschaften WS2010/11. Zeitpunkt der Prüfung: 18.01.2011 Beginn: 10.

Fachhochschule Kaiserslautern Fachbereich Angewandte Ingenieurwissenschaften WS2010/11. Zeitpunkt der Prüfung: 18.01.2011 Beginn: 10. Lehrprozessor: Coldfire MCF-5272 Zeitpunkt der Prüfung: 18.01.2011 Beginn: 10.45 Uhr Raum: Aula Bearbeitungszeit: 180 Minuten Erlaubte Hilfsmittel: Gedrucktes Vorlesungsskript von Prof. Neuschwander mit

Mehr

Projektlabor. LCD Ansteuerung

Projektlabor. LCD Ansteuerung Projektlabor LCD Ansteuerung Contents 1 LCD 3 2 Hardware des Displays 3 2.1 Hardware............................... 3 2.2 Verbindung.............................. 4 3 Softwareansteuerung 6 4 Quellen 10

Mehr

Mikroprozessortechnik Grundlagen 1

Mikroprozessortechnik Grundlagen 1 Grundlagen - Grundbegriffe, Aufbau, Rechnerarchitekturen, Bus, Speicher - Maschinencode, Zahlendarstellung, Datentypen - ATMELmega28 Progammierung in C - Vergleich C und C++ - Anatomie eines µc-programmes

Mehr

Einleitung Die Pins alphabetisch Kapitel 1 Programmierung des ATmega8 und des ATmega

Einleitung Die Pins alphabetisch Kapitel 1 Programmierung des ATmega8 und des ATmega Einleitung... 11 Die Pins alphabetisch.... 12 Kapitel 1 Programmierung des ATmega8 und des ATmega328.... 15 1.1 Was Sie auf den nächsten Seiten erwartet... 19 1.2 Was ist eine Micro Controller Unit (MCU)?....

Mehr

AVR Ein/Ausgabe. Inhaltsverzeichnis

AVR Ein/Ausgabe. Inhaltsverzeichnis Inhaltsverzeichnis AVR Ein/Ausgabe 1 Pinout Arduino Board...4 2 AVR PORT - I N P U T PINB...6 3 AVR PORT Architektur Bausteine...8 4 AVR Port O U T P U T PORTB...10 5 AVR PORT Architektur: Fragen 2...12

Mehr

Ansteuerung eines LCD-Screens

Ansteuerung eines LCD-Screens Ansteuerung eines LCD-Screens Marcel Meinersen 4. Mai 2013 Marcel Meinersen Ansteuerung eines LCD-Screens 4. Mai 2013 1 / 27 Inhaltsverzeichnis 1 Allgemeines Was ist ein LCD-Screen? LCD 162C LED Marcel

Mehr

Tag 3 Timer, ADC und PWM

Tag 3 Timer, ADC und PWM Tag 3 Timer, ADC und PWM 09/01/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 1 Analog-Digital-Wandler Arbeitet durch schrittweise Näherung Aktivieren des ADCs durch ADC Enable

Mehr

Serie 8: Microcontroller 17./18.07.2014

Serie 8: Microcontroller 17./18.07.2014 Serie 8: Microcontroller 17./18.07.2014 I. Ziel der Versuche Erster Erfahrungen mit einem Microcontroller sollen gesammelt werden, die grundlegenden Ein- Ausgabe-Operationen werden realisiert. II. Vorkenntnisse

Mehr

16-Bit PCA Timer/Counter

16-Bit PCA Timer/Counter 4.5.1 Programmable Counter Array (PCA) Das Programmable Counter Array besteht aus fünf PCA-Modulen, die einen gemeinsamen 16- Bit Timer/Counter als Zeitbasis verwenden. ECI: Externer Clock-Eingang für

Mehr

LED board EB

LED board EB LED board EB004-00-2 Inhalt 1. Über dieses Dokument...2 2. Allgemeine Information...3 3. Board-Layout...4 4. Schaltungsbeschreibung...5 Anhang 1 Schaltplan Copyright Matrix Multimedia Limited 2005 seite

Mehr

Temperaturmodul. Software. Bedeutung der Leuchtdioden. Kanal-LEDs. System-LEDs. Start nach Reset

Temperaturmodul. Software. Bedeutung der Leuchtdioden. Kanal-LEDs. System-LEDs. Start nach Reset Temperaturmodul Software Bedeutung der Leuchtdioden Alle LED sind sog. Bicolor-LEDs, die, wie der Name nicht sagt, drei Farben anzeigen können. Rot, grün und gelb, wenn rot und grün gemeinsam aktiviert

Mehr

LCD board EB

LCD board EB LCD board EB005-00-3 Inhalt 1. Über dieses Dokument...2 2. Allgemeine Information...3 3. Board-Layout...6 4. Schaltungsbeschreibung...7 Anhang 1 Schaltplan Copyright Matrix Multimedia Limited 2005 seite

Mehr

Timer. Funktionsprinzip

Timer. Funktionsprinzip Timer Funktionsprinzip 8-Bit-Timer des ATmega28 Beispiel Timer im Polling- und Interrupt-Betrieb Funktionsprinzip Timer ist ein in Hardware realisierter i Zähler ändert seinen Zählerstand mit einer vorgegebenen

Mehr

LED Skalenbeleuchtung mit einem Arduino

LED Skalenbeleuchtung mit einem Arduino Projektteil: LED Skalenbeleuchtung mit einem Arduino Aufgaben: - Ein Taster schaltet die LED-Beleuchtung ein - Nach Ablauf einer im Programm hinterlegten Zeit schaltet sich die Beleuchtung von selbst wieder

Mehr

Ergänzungen zum Manual OS V 2.05/2.06

Ergänzungen zum Manual OS V 2.05/2.06 Ergänzungen zum Manual OS V 2.05/2.06 SYSTEMRESOURCEN - PROGRAMM DOWNLOAD - Ab der Betriebssystemversion 2.05 haben die C-Control Units M-2.0 und Station 2.0 die Möglichkeit das Anwenderprogramm von einem

Mehr

Mikrocontrollertechnik. F5 Erstes Programm. AVR Studio 4

Mikrocontrollertechnik. F5 Erstes Programm. AVR Studio 4 In diesem Kapitel wird erklärt wie man möglichst schnell mit dem Programm Studio 4 von Atmel und einem ISP Programmer einen ATmega Controller programmiert. Es ist kein umfassendes Tutorial zum Programm

Mehr

Interrupt - Programmierung für den PIC12F675

Interrupt - Programmierung für den PIC12F675 Interrupt - Programmierung für den PIC12F675 Ein Interrupt ist eine asynchrone Unterbrechung des "normalen" Programmablaufs. Wenn ein Interrupt auftritt, wird der Befehl (bzw. die Befehle) ab Adresse 0x004

Mehr

Ein- / Ausgabe- Ports

Ein- / Ausgabe- Ports Ein- / Ausgabe- Ports Alle vier parallelen Ports sind bidirektional und bestehen aus einem 8-Bit-Special-Function- Register für die Ausgabedaten, einem Ausgangstreiber und einem Eingabepuffer. Jeder Port-

Mehr

Industrie- und Handelskammer. Abschlussprüfung Teil 1 und Teil 2. Elektroniker/-in für Geräte und Systeme

Industrie- und Handelskammer. Abschlussprüfung Teil 1 und Teil 2. Elektroniker/-in für Geräte und Systeme Industrie- und Handelskammer Abschlussprüfung Teil und Teil 2 Berufs-Nr. 390 Herstellungsunterlagen Mikrocontroller-Einschub MC2v0 MC2 390 B0 200, IHK Region Stuttgart, alle Rechte vorbehalten IHK Abschlussprüfung

Mehr

Einführung in die Welt der Microcontroller

Einführung in die Welt der Microcontroller Übersicht Microcontroller Schaltungen Sonstiges Einführung in die Welt der Microcontroller Übersicht Microcontroller Schaltungen Sonstiges Inhaltsverzeichnis 1 Übersicht Möglichkeiten Einsatz 2 Microcontroller

Mehr

U5-2 Register beim AVR-µC

U5-2 Register beim AVR-µC U5 4. Übungsaufgabe U5 4. Übungsaufgabe U5-2 Register beim AVR-µC U5-2 Register beim AVR-mC Grundlegendes zur Übung mit dem AVR-µC 1 Überblick Register Beim AVR µc sind die Register: I/O Ports Interrupts

Mehr

HD44780-LC-Display am Atmel-AVR Mikrocontroller

HD44780-LC-Display am Atmel-AVR Mikrocontroller Fachbereich Elektrotechnik und Informatik Labor für Angewandte Informatik und Datenbanken Praktikum Automatisierung / Echtzeitregelung (BAU/BER) Prof.Dr.-Ing. Coersmeier HD44780-LC-Display am Atmel-AVR

Mehr

Lösungen zum Kurs "Mikrocontroller Hard- und Software

Lösungen zum Kurs Mikrocontroller Hard- und Software Lösungen zum Kurs "Mikrocontroller Hard- und Software Gerhard Schmidt Kastanienallee 20 64289 Darmstadt http://www.avr-asm-tutorial.net Lösung Aufgabe 2 Aufgabe 2 sbi DDRB,PB0 2 Takte sbi PORTB,PB0 2 Takte

Mehr

Microcontroller Kurs. 08.07.11 Microcontroller Kurs/Johannes Fuchs 1

Microcontroller Kurs. 08.07.11 Microcontroller Kurs/Johannes Fuchs 1 Microcontroller Kurs 08.07.11 Microcontroller Kurs/Johannes Fuchs 1 Was ist ein Microcontroller Wikipedia: A microcontroller (sometimes abbreviated µc, uc or MCU) is a small computer on a single integrated

Mehr

BLUE line. Bedienungsanleitung zum M-Unit Experimentierboard. Innovative Technik. Tobias Regenhardt Grüner Weg Seulingen

BLUE line. Bedienungsanleitung zum M-Unit Experimentierboard. Innovative Technik. Tobias Regenhardt Grüner Weg Seulingen BLUE line Innovative Technik Bedienungsanleitung zum M-Unit Experimentierboard Stand: November 2003 Tobias Regenhardt Grüner Weg 6 37136 Seulingen Tel: 0175/2716591 e-mail: TobiasRegenhardt@web.de Vorwort

Mehr

GTP444. GSM-SMS-Fernschaltund Alarmmodul 4-Kanal. Programmierbar am PC mit Software. Kurzanleitung 1/2017. Seite 1 von 7

GTP444. GSM-SMS-Fernschaltund Alarmmodul 4-Kanal. Programmierbar am PC mit Software. Kurzanleitung 1/2017. Seite 1 von 7 GTP444 GSM-SMS-Fernschaltund Alarmmodul 4-Kanal Programmierbar am PC mit Software Kurzanleitung 1/2017 Seite 1 von 7 Technische Daten: Frequenzbereich 900/1800/1900MHz Betriebsspannung 12V DC, max. Stromaufnahme

Mehr

Kurzanleitung: 1. Anschüsse. MWCLightRGB by VoBo & HaDi-RC

Kurzanleitung: 1. Anschüsse. MWCLightRGB by VoBo & HaDi-RC Kurzanleitung: 1. Anschüsse Input: 3,8 bis 5 Volt!(nicht 5,5 V oder 6 V!) Output: Anschlüsse für WS2812 LED-Bänder (6/9 LED s / Arm) RC1: RC-Kanal -> Auswahl der Funktion/Lichtmuster RC2: RC-Kanal -> Auswahl

Mehr

8.1 Grundsätzlicher Aufbau der Beispiele

8.1 Grundsätzlicher Aufbau der Beispiele 107 8 Beispiele Nachdem nun viele theoretische Grundlagen gelegt wurden, kann man mit dem Programmieren eines Mikrocontrollers beginnen. In den folgenden Kapiteln werden verschiedene Möglichkeiten der

Mehr

Elektrische Schnittstelle Signal

Elektrische Schnittstelle Signal Normen Europäischer Modellbahnen Elektrische Schnittstelle Signal NEM 692 Seite 1 von 6 Empfehlung Ausgabe 2011 1. Zweck der Schnittstelle Die Schnittstelle beschreibt für mechanische Signale und Lichtsignale

Mehr

analoge Ein- und Ausgänge

analoge Ein- und Ausgänge 2016/07/17 13:39 1/5 analoge Ein- und Ausgänge analoge Ein- und Ausgänge Neben den digitalen Leitungen bietet der Arduino mehrere analoge Ein- und Ausgänge. analoge Ausgänge Die Ausgänge sind mit PWM bezeichnet.

Mehr

The amforth Cookbook angefangen

The amforth Cookbook angefangen The amforth Cookbook Author: Datum: Erich Wälde 2009-02-22 angefangen 2 Inhaltsverzeichnis 1 Projekt mit ATMEGA 32 5 1.1 Board................................ 5 1.2 Beispiel Applikation........................

Mehr

Laborübung 4. Zustandsautomaten (Finite State Machines)

Laborübung 4. Zustandsautomaten (Finite State Machines) Laborübung 4 Zustandsautomaten (Finite State Machines) Für den Entwurf und die Beschreibung von digitalen Systemen bilden Zustandsautomaten (Finite State Maschines; FSMs) eine wesentliche Grundlage. Mit

Mehr

Zähler- und Zeitgeber-Baugruppen

Zähler- und Zeitgeber-Baugruppen Zähler- und Zeitgeber-Baugruppen Sinn: häufig müssen Zeitbedingungen eingehalten werden z.b.: einige ms warten, Häufigkeit von Ereignissen zählen etc... Lösung: 1.) Zeitschleifen = Programm abarbeiten,

Mehr

Inhaltsverzeichnis 1 Ein-Bit-Rechner Mikrorechentechnik-Grundlagen Das Mikrocontrollersystem ein Überblick am Beispiel MSP430F1232

Inhaltsverzeichnis 1 Ein-Bit-Rechner Mikrorechentechnik-Grundlagen Das Mikrocontrollersystem ein Überblick am Beispiel MSP430F1232 Inhaltsverzeichnis 1 Ein-Bit-Rechner... 15 1.1 Rechenwerk... 15 1.1.1 Register und Takt... 16 1.1.2 Zwischenspeicher... 17 1.1.3 Native und emulierte Datenmanipulationsbefehle... 18 1.2 Steuerwerk... 20

Mehr

Highspeed. Kurzzeitfotografie in Natur und Studio. Bearbeitet von Hans-Christian Steeg

Highspeed. Kurzzeitfotografie in Natur und Studio. Bearbeitet von Hans-Christian Steeg Highspeed Kurzzeitfotografie in Natur und Studio Bearbeitet von Hans-Christian Steeg 1. Auflage 2014. Buch. XIV, 273 S. Hardcover ISBN 978 3 86490 034 1 Format (B x L): 21 x 21 cm Weitere Fachgebiete >

Mehr

Inhaltsverzeichnis VII

Inhaltsverzeichnis VII Inhaltsverzeichnis 1 Grundlagen der Mikrocontroller... 1 1.1 Mikrocontroller-Familie ATtiny2313, ATtiny26 und ATmega32.... 6 1.1.1 Merkmale des ATtiny2313, ATtiny26 und ATmega32..... 8 1.1.2 Pinbelegung

Mehr

8.3 Taster am µcontroller

8.3 Taster am µcontroller 8.3 Taster am µcontroller AVR-KOMPENDIUM Nachdem im vorigen Beispiel das Port als Ausgang verwendet wurde erweitern wir dieses Beispiel um einen Taster - um auch das Einlesen von digitalen Signalen zu

Mehr

MikroController der 8051-Familie

MikroController der 8051-Familie i Dipl.-Ing. Roland Dilsch MikroController der 8051-Familie Aufbau, Funktion, Einsatz Vogel Buchverlag Inhaltsverzeichnis Vorwort 5 1 Was ist ein MikrocontroUer? 13 1.1 Aufbau eines Computers 13 1.2 Entstehung

Mehr

RalfPongratz. Grundversion. Reaktivlichtmit7SegmentAnzeige

RalfPongratz. Grundversion. Reaktivlichtmit7SegmentAnzeige www.reaktivlicht.de RalfPongratz 7Segment Grundversion Reaktivlichtmit7SegmentAnzeige AuchalsBausatzerhältlichauf www.reaktivlicht.de Grundversion Reaktivlicht mit 7 Segment Anzeige Ralf Pongratz 13. September

Mehr

Mikrocomputertechnik

Mikrocomputertechnik Mikrocomputertechnik Bernd-Dieter Schaaf Mit Mikrocontrollern der Familie 8051 ISBN 3-446-40017-6 Leseprobe Weitere Informationen oder Bestellungen unter http://www.hanser.de/3-446-40017-6 sowie im Buchhandel

Mehr

Mikroprozessor-Experimentier-System

Mikroprozessor-Experimentier-System Fachbereich Elektrotechnik Fachgebiet Industrieelektronik & Digitaltechnik Fachhochschule Hannover University of Applied Sciences and Arts Mikroprozessor-Experimentier-System mit einem 8051-Mikrocontroller

Mehr

F4 Fuse- und Lock-Bits

F4 Fuse- und Lock-Bits Im AVR gibt es eine Reihe von programmierbaren Schaltern, die wichtige Eigenschaften des Controller festlegen. Diese Schalter können nur mit dem Programmiergerät verändert werden (Ausnahme: Bootloader

Mehr

BOOTLOADER für AVR-Entwicklungsmodule

BOOTLOADER für AVR-Entwicklungsmodule BOOTLOADER für AVR-Entwicklungsmodule mit ATxmega128A1 mit ATxmega256A3 Verzeichnis 1. Einleitung 3 2. Einstellungen 4 2.1. Fuse Bits 4 2.2. AVROSP Programm 5 2.2.1. Erläuterung der BAT-Dateien 5 2.2.2.

Mehr

SIOSLAB. Technische Daten:

SIOSLAB. Technische Daten: SIOSLAB Das SIOSLAB ist ein universelles PC-Interface mit 8 digitalen Ein- und Ausgängen, 2 analogen Eingängen sowie wahlweise mit 2 PWM-Ausgängen. Der Anschluss erfolgt über die serielle Schnittstelle

Mehr

Versuch 2, LPC11U24 - GPIO

Versuch 2, LPC11U24 - GPIO Die LED auf dem Piggyback (weiße Zusatzplatine) soll mit Hilfe der BOOT-Taste gesteuert werden. Solange die Taste gedrückt ist, soll die LED leuchten. Ist die Taste nicht gedrückt, dann bleibt die LED

Mehr

Wie in der Skizze zu sehen ist, bleibt die Periodendauer / Frequenz konstant und nur die Pulsweite ändert sich.

Wie in der Skizze zu sehen ist, bleibt die Periodendauer / Frequenz konstant und nur die Pulsweite ändert sich. Kapitel 2 Pulsweitenmodulation Die sogenannte Pulsweitenmodulation (kurz PWM) ist ein Rechtecksignal mit konstanter Periodendauer, das zwischen zwei verschiedenen Spannungspegeln oszilliert. Prinzipiell

Mehr

System-On-Chip zum Messen, Steuern und Regeln

System-On-Chip zum Messen, Steuern und Regeln System-On-Chip zum Messen, Steuern und Regeln Mikrocontroller mit Analogfunktionen reduziert Systemaufwand Dr. Claus Kühnel Microchip, bekannt durch die breite Palette an Mikrocontrollern der PICmicro

Mehr

PICkit 2 / 3. Programmierung mit dem USB-Programmer PICkit2 bzw. PICkit3 (Microchip) AB-2011-01

PICkit 2 / 3. Programmierung mit dem USB-Programmer PICkit2 bzw. PICkit3 (Microchip) AB-2011-01 PICkit 2 / 3 Programmierung mit dem USB-Programmer PICkit2 bzw. PICkit3 (Microchip) AB-2011-01 In diesem Dokument wird ein Umbau beschrieben. Für die Funktion des Umbaus gibt es keine Garantie. Für durch

Mehr

Der Mikrocontroller beinhaltet auf einem Chip einen kompletten Mikrocomputer, wie in Kapitel

Der Mikrocontroller beinhaltet auf einem Chip einen kompletten Mikrocomputer, wie in Kapitel 2 Der Mikrocontroller Der Mikrocontroller beinhaltet auf einem Chip einen kompletten Mikrocomputer, wie in Kapitel 1 beschrieben. Auf dem Chip sind die, ein ROM- für das Programm, ein RAM- für die variablen

Mehr

Logic Express 8 Arbeiten mit Apogee Hardware

Logic Express 8 Arbeiten mit Apogee Hardware Logic Express 8 Arbeiten mit Apogee Hardware Logic Express bietet ein spezifisches Kontrollfeld, mit dem Sie die Duet- und Ensemble- Hardware von Apogee direkt konfigurieren können. Hinweis: Das Kontrollfeld

Mehr

Teach-Dongle Rev 1.1. Teach-Dongle. Rev 1.1 Stand Okt

Teach-Dongle Rev 1.1. Teach-Dongle. Rev 1.1 Stand Okt Teach-Dongle - 1 - - 2 - 1. Allgemeines Inhaltsverzeichnis 1.1 Informationen zum Teach-Dongle Überblick Features 1.2 Rechtliches Urheberrechte Warenzeichen 1.3 EMV Anmerkungen zur EMV 2. Hardwarebeschreibung

Mehr

Einführung in die Microchip PIC-Controller vergleichende Betrachtung zu anderen Microcontrollern CLUG 12.2.2016. Matthias Kupfer

Einführung in die Microchip PIC-Controller vergleichende Betrachtung zu anderen Microcontrollern CLUG 12.2.2016. Matthias Kupfer Einführung in die Microchip PIC-Controller vergleichende Betrachtung zu anderen Microcontrollern CLUG 12.2.2016 Matthias Kupfer maku@kupfer-it.de 1 Übersicht Überblick über Microchip PIC-Familie Eigenschaften

Mehr

GdI2 - Systemnahe Programmierung in C Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2006 U4.fm

GdI2 - Systemnahe Programmierung in C Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2006 U4.fm U4 4. Übungsaufgabe U4 4. Übungsaufgabe Grundlegendes zur Übung mit dem AVR-µC Register I/O Ports Interrupts AVR-Umgebung U4.1 U4-1 Grundlegendes zur Übung mit dem AVR-mC U4-1 Grundlegendes zur Übung mit

Mehr

Was so passieren wird:

Was so passieren wird: Arduino Einführung Arduino Einführung Was so passieren wird: Was so passieren wird: Arduino Überblick Was so passieren wird: Arduino Überblick Die Taschenlampe Was so passieren wird: Arduino Überblick

Mehr

Kennlinienschreiber. Inbetriebnahme und Abgleich

Kennlinienschreiber. Inbetriebnahme und Abgleich Kennlinienschreiber Inbetriebnahme und Abgleich (c) DL4JAL, Andreas Lindenau 18. Oktober 2010 Zusammenfassung Nach dem Aufbau des Kennlinienschreibers ist ein Abgleich erforderlich. Das beschreibe ich

Mehr

Analog Ausgangsmodul DAO 081 für acht ±10 V DC Ausgänge

Analog Ausgangsmodul DAO 081 für acht ±10 V DC Ausgänge Analog Ausgangsmodul DAO 081 für acht ±10 V DC Ausgänge Dieses analoge Ausgangsmodul wird zur Ansteuerung von analog steuerbaren Komponenten (z.b.: Proportionaldruck- Ventile, Frequenzumrichter, usw.)

Mehr

Infokarte: Snap4Arduino

Infokarte: Snap4Arduino Infokarte: Snap4Arduino Ein Arduino-Projekt erstellen Um ein neues Arduino-Projekt in Snap4Arduino zu erstellen, wird das Programm geöffnet. Snap erzeugt automatisch ein neues Projekt. Soll ein bereits

Mehr

Studiengang Maschinenbau, Schwerpunkt Mechatronik (früher: Automatisierungstechnik) Seite 1 von 8

Studiengang Maschinenbau, Schwerpunkt Mechatronik (früher: Automatisierungstechnik) Seite 1 von 8 Studiengang Maschinenbau, Schwerpunkt Mechatronik (früher: Automatisierungstechnik) Seite 1 von 8 Hochschule München Fakultät 03 Zugelassene Hilfsmittel: alle eigenen, Taschenrechner Viel Erfolg!! Komponenten

Mehr

Selbstbau-USB-Programmiergerät für AVR

Selbstbau-USB-Programmiergerät für AVR Jean-claude.feltes@education.lu 1 Selbstbau-USB-Programmiergerät für AVR Nach Christian Ullrich Homepage: www.ullihome.de Weitere Infos bei http://weigu.lu/a/pdf/micel_f6_programmieradapter.pdf Schaltung

Mehr

C++ mit dem Arduino (Uno und Mega2560)

C++ mit dem Arduino (Uno und Mega2560) C++ mit dem Arduino (Uno und Mega2560) 1. Toolchain Als toolchain bezeichnet man die Reihe von Software, die nötig ist um den Prozessor zu programmieren, das Ergebnis draufzuladen und dann zu testen. Hier

Mehr

Stefan Schröder Hard- und Softwareentwicklungen. Steuerung für GPRS-Module und elektronische Sicherung. Zum Neetzekanal Brietlingen

Stefan Schröder Hard- und Softwareentwicklungen. Steuerung für GPRS-Module und elektronische Sicherung. Zum Neetzekanal Brietlingen Stefan Schröder Hard- und Softwareentwicklungen Steuerung für GPRS-Module und elektronische Sicherung Stefan Schröder Hard- und Softwareentwicklungen Zum Neetzekanal 19 21382 Brietlingen e-mail: schroeder@sshus.de

Mehr

ATXMega256a3-Controllerboard und 3,2" Touch-LCD-Farbdisplay mit High-Level-Grafikcontroller

ATXMega256a3-Controllerboard und 3,2 Touch-LCD-Farbdisplay mit High-Level-Grafikcontroller RIBU ELEKTRONIK VERSAND Mühlenweg 6. 8160 Preding. Tel. 03172/64800. Fax 03172/64806 e-mail:office1@ribu.at. Internet: http://www.ribu.at ATXMega256a3-Controllerboard und 3,2" Touch-LCD-Farbdisplay mit

Mehr

PRODIS. PD-ADC Digitale Prozessanzeige für analoge Sensoren. Digitale Prozessanzeigen. Datenblatt

PRODIS. PD-ADC Digitale Prozessanzeige für analoge Sensoren. Digitale Prozessanzeigen. Datenblatt Digitale Prozessanzeigen Digitale Prozessanzeige für analoge Sensoren Datenblatt Copyright ASM GmbH Am Bleichbach 18-24 85452 Moosinning Die angegebenen Daten in diesem Datenblatt dienen allein der Produktbeschreibung

Mehr

UNTERSCHIEDE SD6 - SD7

UNTERSCHIEDE SD6 - SD7 UNTERSCHIEDE SD6 - SD7 Seite 1 Inhaltsverzeichnis 1 Allgemeines 3 2 Funktionsunterschiede 4 3 Unterschiede Sollwert-Skalierung (nur Verstärker) 6 4 Unterschiede digitale Eingänge WAG-Standard zu SD6 7

Mehr

Die Robo-TX RS-485 Schnittstelle

Die Robo-TX RS-485 Schnittstelle Die Robo-TX RS-485 Schnittstelle Die Idee... Gleich nach dem Kauf des TX fiel mir in der Anleitung auf, dass auf den Extension-Anschlüssen nur die RS-485-Schnittstelle auf beiden vorkommt. Somit war klar,

Mehr

Datenblatt zu PKKC1091 V2.2 Pufferakku-Ladeschaltung / USV

Datenblatt zu PKKC1091 V2.2 Pufferakku-Ladeschaltung / USV Datenblatt zu PKKC1091 V2.2 Pufferakku-Ladeschaltung / USV Die Schaltung dient zur Stabilisierung der Versorgungsspannung eines Rechnersystems und besteht im wesentlichen aus zwei Schaltungsteilen: 1.)

Mehr

Installation & Usage. Version 1.0. estickflashtool

Installation & Usage. Version 1.0. estickflashtool Installation & Usage Version 1.0 estickflashtool Allgemeines Der estick ist ein USB basiertes Entwicklungs-Board für Atmel AT90USB162 Mikro-controller. Einfache, anschauliche Anwendungen und Beispiele

Mehr

D.1 Vorbereitung. Teil D Analog-Digital-Wandler 1

D.1 Vorbereitung. Teil D Analog-Digital-Wandler 1 D.1 Vorbereitung So wird der Analog-Digital-Wandler des Mikrocontrollers ATmega328P initialisiert: ADMUX = _BV(REFS0); ADCSRA = _BV(ADEN) _BV(ADPS2) _BV(ADPS1) _BV(ADPS0); Der Analog-Digital-Wandler ist

Mehr

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Implementierung von Interruptbehandlungen. Interrupts

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Implementierung von Interruptbehandlungen. Interrupts Übungen zu Systemnahe Programmierung in C (SPiC) Moritz Strübe, Rainer Müller (Lehrstuhl Informatik 4) Inhalt Interrupts Allgemein AVR Interrupt-Handler Synchronisation volatile Sperren von Interrupts

Mehr