The amforth Cookbook angefangen

Ähnliche Dokumente
The amforth Cookbook english version started

Timer. Funktionsprinzip

Für den CTC-Mode kann demnach TCCR1A komplett auf 0 gesetzt werden, weil WGM11 und WGM10 in diesem Register liegen und beide laut Tabelle 0 sind:

Erzeugen von PWM-Signalen mit dem Atmel AVR-Mikrocontroller

Unter einem Interrupt kann man sich einen durch Hardware ausgelösten Unterprogrammaufruf vorstellen.

Interrupt-Programmierung

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

Tag 3 Timer, ADC und PWM

Mikrocontrollertechnik C2 Timer. Einführung

16-Bit PCA Timer/Counter

Proseminar Timer/Counter und PWM beim ATMega16 Mikrocontroller. Marcel Jakobs

Übung "Struktur von Mikrorechnern" (CBS)

AVR-Mikrocontroller in BASCOM programmieren, Teil 3

ATmega169 Chip: Pin-Layout

Forth-Vokabular. Vokabular für Attiny2313-Forth Stand: A: Assembler-Wort F: Forth-Wort C: Compiler-Wort

Puls Weiten Modulation (PWM)

Atmega Interrupts. Rachid Abdallah Gruppe 3 Betreuer : Benjamin Bös

Einführung in die Welt der Microcontroller

Autonome Mobile Systeme. Dr. Stefan Enderle

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

Analog-Digital-Converter

IR NEC Empfänger mit 4x7 LED Anzeige (ATtiny2313)

Einführung in die Programmierung von Mikrocontrollern mit C/C++

Arduino Kurs Timer und Interrupts. Stephan Laage-Witt FES Lörrach

Mikrocomputertechnik

Die AVR Mikrocontrollerfamilie

WS 2017/18 Viel Erfolg!!

Lösungen zum Kurs "Mikrocontroller Hard- und Software

Bootloader FastBoot von Peter Dannegger

AVR-8-bit-Mikrocontroller Gruppe Technologie der AVR-8-bit-Mikrocontroller Teil SPI

Microcontroller Selbststudium Semesterwoche 9

Nachtaktiver Blinker. Ralf Pongratz. 11. November 2012

Programmierübungen in Assembler

DST EINFÜHRUNG IN MRT

analoge Ein- und Ausgänge

Mikrocontrollertechnik

Laborübung 3. Latches, Flipflops, Counter

Embedded Systems

Aufbau eines Assembler-Programms

Ein-Bit-Rechner 15. Mikrorechentechnik-Grundlagen 29

Dies und das zu atmega und amforth

ATmega8. Projekte mit AVR-Mikrocontroller. Ein Digitalvoltmeter Seite 1 von 6. Ein Datenlogger

Vortrag zur Seminarphase der PG Solar Doorplate MSP430 Wichtigste Grundlagen von David Tondorf

Neues vom STRIP Forth-Prozessor

Serie 8: Microcontroller 17./

Mikrocontrollerplatine vorbereiten

Microcontroller Kurs Programmieren Microcontroller Kurs/Johannes Fuchs 1

Richtung durch Taster während des Ablaufs umschaltbar

V cc. 1 k. 7 mal 150 Ohm

EXF2 TF2 IEX6 IEX5 IEX4 IEX3 IEX2 IADC 0C0H T2PS I3FR I2FR T2R1 T2R0 T2CM T2I1 T2I0 0C8H. AFH AEH ADH ACH ABH AAH A9H A8H Bitdresse

Tag 2 Eingabe und Interrupts

80C535-Mikrocontroller-Board im Streichholzschachtelformat

Rechnerarchitektur Atmega Vortrag Atmega 32. Von Urs Müller und Marion Knoth. Urs Müller Seite 1 von 7

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

Arduino Nano. Hello World per LED On-Board LED (Pin D13) Beispiel: Arduino IDE / Beispiele / Basics / Blink 5 / 20

LED Skalenbeleuchtung mit einem Arduino

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

Beschreibung Modell Motorspindel

Programmierung Nibo 2 Teil 8 Multitasking. * by nicaisystems

MSP 430. Einführung. Was kann er? Hauptthemen. Wie sieht er aus? 64 / 100 polig. Was kann er? MSP 430 1

E Mikrocontroller-Programmierung

Zähler- und Zeitgeber-Baugruppen

Das Eingangstaktsignal kann entweder intern oder extern eingespeist werden.:

Da der Mikrocontroller mit den internen Timern sehr genau Zeiten messen kann, entschieden wir uns für die Zeitmessung.

Klasse, Name : Datum : Rad l/r Linienfolger l/r Laderaum ATMEGA 128

MODUL 6 TIMER UND COUNTER

Serielle Schnittstelle, erstes Testprogramm (a)

C.1 Serielle Schnittstelle, erstes Testprogramm (a)

myavr Programmierung in C

Hardware Software Handshake UART. Maik Holzhey. Fakultät IV Technische Universität Berlin. 22. Mai 2014

Anwendung und Programmierung von Mikrocontrollern. Anwendung und Programmierung von Mikrocontrollern

U5-2 Register beim AVR-µC

Die Technik hinter IoT: Arduino, Raspberry Pi & Co.

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

Arduino Kurs Das LC-Display. Stephan Laage-Witt FES Lörrach

BOOTLOADER für AVR-Entwicklungsmodule

Arduino und Amateurfunk (1)

Eigenschafte: Konfiguration: Baudrate:

Ruecklicht-V1 von Peter Krueger /

i2c-bus.de ASCII ZEICHEN AUF DEM HYPERTERMINAL Übungsaufgabe RS232 Schnittstelle Dokument NR.: AB-001-U-01

Projektdokumentation: DCF 77 Funkuhr

Programmieren der AVR RISC MikroController mit BASCOM-AVR

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

STM32 - Schieberegister, SPI - u

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

Abschlusspräsentation - Bachelorarbeit

AVR-Mikrocontroller mit dem GCC programmieren

Port 0 Port 1 Port Operand: 7 (High Byte)

ATxMEGA 128 Board 2. Inhalt

Interruptsystem AVR. Interrupt-Quellen: Extern, Timer, ADC, USART usw. (siehe IVT im Anhang) Rücksprungadresse automatisch am Stack.

Einführung Microcontroller

Mikroprozessortechnik Grundlagen 1

Inhaltsverzeichnis VII

Einführung in die technische Informatik

Transkript:

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........................ 5 1.3 ATMEGA Register und Bit Bezeichungen............. 5 2 Hardware lastige Programme 7 2.1 Hello, world!............................ 7 2.2 turnkey: wie ein Programm direkt nach dem Einschalten startet. 7 2.3 Zeit zählen mit Timer2 und einem Uhrenquarz........... 8 2.4 Analoge Signalpegel ausmessen (ADC).............. 12 2.5 Puls Weiten Modulation (PWM)................. 12 2.5.1 PWM Signal erzeugen (fast pwm mode).......... 12 3 software lastige Programme 15 3.1 Uhrzeit/Kalender, timeup..................... 15 3.2 Das DCF Zeitzeichen empfangen und auswerten.......... 15 3.3 Die timeup Uhr mit der DCF Uhr synchronisieren........ 15 3

4 INHALTSVERZEICHNIS

Kapitel 1 Projekt mit ATMEGA 32 1.1 Board embedit prototype board mit ATMEGA 32, Quarz 11.059200 MHz, serielle Schnittstelle auf 115200 baud 1.2 Beispiel Applikation Erklärung einer kompletten Beispielapplikation; amforth; dictionary; amforth libs; template 1.3 ATMEGA Register und Bit Bezeichungen hier muß ein komplettes amforth file hin, in dem die Register und Bits alle aufgelistet sind. 5

6 KAPITEL 1. PROJEKT MIT ATMEGA 32

Kapitel 2 Hardware lastige Programme 2.1 Hello, world! Das erste Programm auf einem Mikrocontroller lässt eine LED blinken. Jedenfalls scheint das die Tradition zu sein. 2.2 turnkey: wie ein Programm direkt nach dem Einschalten startet Problem Das mühevoll geschriebene Programm soll auf dem Mikrocontroller starten, sobald der eingeschaltet wird. Lösung Man schreibt eine Funktion, die als turnkey registriert wird. Code Modul/e 28 : run-turnkey 29 baud +usart >usart +int 30 ver 31 run 32 ; 33 34 run-turnkey is turnkey Diskussion wort... Erklärung, Grenzen, Erweiterungen, Alternativen 7

8 KAPITEL 2. HARDWARE LASTIGE PROGRAMME Weiterlesen 2.3 Zeit zählen mit Timer2 und einem Uhrenquarz Problem Sie wollen eine verlässliche Messung der Zeit Lösung Für eine verlässliche Messung der Zeit kann man Timer2 mit einem zusätzlichen Uhrenquarz (32768 Hz) betreiben. Schaltung Uhrenquarz an TOSC1,TOSC2 Konfiguration Um Timer2 mit dem externen Uhrenquarz zu betreiben, müssen folgende Register/Bits gesetzt werden (Datenblatt S.125ff): TCCR2: im Timer/Counter Control Register 2 wählt man die ungeteilte Frequenz als Quelle: CS22,CS21,CS20 = 001. Die übrigen Bits bleiben auf 0, d.h. Timer2 wird im normal mode betrieben: das Zählerregister wird von 0 aufwärts bis 255 gezählt, löst dann ggf. einen Interrupt aus und fängt wieder bei 0 an zu zählen. TCNT2 enthält den aktuellen Zählwert. ASSR: im Asynchronous Status Register wird das Bit AS2 auf 1 gesetzt. Damit wählt man den Uhrenquarz an Pin TOSC1 als Quelle. Das ist der sogenannte asynchrone Modus, weil der (externe) Uhrenquarztakt völlig unabhängig vom (internen) Takt des Kontrollers läuft. TIMSK: im Timer/Counter Interrupt Mask Register wird gesetzt, daß das Überlaufen des Zählers einen Interrupt auslösen soll. Code 1 \ timer2_clock.fs 2 3 \ variable: 4 \ timer2 5 \ words: 6 \ +ticks register isr and enable interupt 7 \ -ticks disable interupt 8 \ tick_isr interupt service routine: increments timer2 9 10 \ f_crystal: 32768 /sec == clock source

2.3. ZEIT ZÄHLEN MIT TIMER2 UND EINEM UHRENQUARZ 9 11 \ overflow: 32768/256 = 128 /sec =ˆ= 7.8125 milli-sec ticks 12 13 \ TCCR2 [FOC2,WGM20,COM21,COM20,WGM21,CS22,CS21,CS20] 14 \ ASSR [-,-,-,-,AS2,TCN2UB,OCR2UB,TCR2UB] 15 \ TIMSK [OCIE2,TOIE2,TICIE1,OCIE1A,OCIE1B,TOIE1,OCIE0,TOIE0] 16 17 variable timer2 18 19 hex 20 \ Timer2 overflow ISR: 21 \ increment timer2 22 : tick_isr 23 1 timer2 +! 24 ; 25 \ enable ticks 26 : +ticks 27 1 TCCR2 c! \ select clock undivided 28 8 ASSR c! \ select external quarz clock source 29 \ fixme: int! 30 [ ] tick_isr TIMER2_OVFAddr 2/ int! \ register ISR 31 TIMSK c@ 40 or TIMSK c! \ enable Timer2 overflow interrupt 32 ; 33 \ disable ticks 34 : -ticks 35 TIMSK c@ 36 [ 40 invert ff and ] literal 37 and TIMSK c! \ disable Timer2 overflow interrupt 38 ; Verwendung 1 \ run_timer2_clock.fs 2 3 marker --start-- 4 5 include devices/atmega32.frt 6 include cooklib/ms.frt \ ms 7 include cooklib/timer2_clock.frt \ tick_isr +ticks -ticks 8 decimal 9 128 constant ticks/sec 10 variable old_timer2 11 12 : run 13 0 timer2! 14 0 old_timer2! 15 +ticks 16 decimal 17 begin 18 1000 ms

10 KAPITEL 2. HARDWARE LASTIGE PROGRAMME 19 cr timer2 @ 20 dup u. 21 dup old_timer2 @ - 22 dup. 23 ticks/sec <> if." <--" then 24 old_timer2! 25 key? until 26 -ticks 27 ; Ausgabe 1 > run 2 3 129 129 <-- 4 257 128 5 385 128 6 513 128 7 641 128 8 768 127 <-- 9 897 129 <-- 10 1025 128 11 1153 128 12 1281 128 13 1409 128 14 1537 128 15 1665 128 16 1793 128 Diskussion Es werden die folgenden Worte definiert: +ticks konfiguriert Timer2. Über das Timer/Counter Control Register 2 wird festgelegt, daß Timer2 mit der ungeteilten Frequenz des Uhrenquarzes läuft (1 TCCR2 c!).??? Danach wird tick isr als Interupt Service Routine registriert ([ ] tick_isr OVF2addr int!). Und schließlich wird der Timer2 Interupt eingeschalten (TIMSK c@ 40 or TIMSK c!). -ticks schaltet den Timer2 aus. timer2 ist eine Variable, die beim Ausführen von tick isr hochgezählt wird. tick isr ist eine Interupt Service Routine, die immer aufgerufen wird, wenn Timer2 übergelaufen ist und den Interupt auslöst. Die Variable timer2 wird hochgezählt. Es werden keine Vorkehrungen gegen den Überlauf getroffen. In der Variablen timer2 werden die Überläufe von Timer2 gezählt. Timer2 wird 32768 pro Sekunde erhöht. Er läuft nach 256 Schritten über, also 32768/256 = 128 mal pro Sekunde. Dieser Wert wird in der Konstanten ticks/sec aufgehoben.

2.3. ZEIT ZÄHLEN MIT TIMER2 UND EINEM UHRENQUARZ 11 der timer2 interrupt wird nie gelöscht. Daher funktioniert das so. Wenn man ein Bit aus ISR löschen muß, dann muß man die auch in Assembler verfassen. (Beispiel???) Aysgabebeispiel? Wenn man die Wartezeit etwas verkürzt, dann kann man das so hinkriegen, daß fast immer 128 ticks vergehen. Man kann aus der Größe der Korrektur auf die Laufzeit des regelmäßigen Programmteils in der Schleife schließen. So ungefähr jedenfalls. Gibt es Alternativen zu dem o.g. Vorgehen? externe RTC mit Sekunden Interrupt an Pin??? Weiterlesen Timer/Counter2 (Datenblatt S.125ff???) Interrupts und Forth Interupts Kap.??? timeup

12 KAPITEL 2. HARDWARE LASTIGE PROGRAMME 2.4 Analoge Signalpegel ausmessen (ADC) Problem Lösung Schaltung Konfiguration Code Modul/e Verwendung Code Verwendung Diskussion wort... Erklärung, Grenzen, Erweiterungen, Alternativen Weiterlesen 2.5 Puls Weiten Modulation (PWM) Was ist PWM? Wie geht das beim ATMEGA? Die Zähler des ATMEGA können (alle?) auch zum Erzeugen von PWM Signalen eingesetzt werden. Dabei wird der Zähler mit einem Oszillatorsignal versorgt (normalerweise vom CPU Quarz) und zählt bei jedem Impuls weiter. Es gibt ein oder zwei weitere Vergleichs-Register (output compare register), mit deren Inhalt der Zählerstand bei jedem Schritt verglichen wird. Stimmen die Inhalte von Zähler und Vergleichsregister überein, dann können daraus verschiedene Aktionen automatisch angestoßen werden. Im einfachsten Fall wird der Pegel des zugehörigen Ausgabe-Pins geändert. Interrupts können ebenfalls ausgelöst werden. es gibt mehrere verschiedene Modi, in denen eine Zähler/PWM Kombination betrieben werden kann. 2.5.1 PWM Signal erzeugen (fast pwm mode) Problem Sie wollen ein einstellbares PWM Signal ausgeben um damit die Helligkeit einer LED (oder die Leistungsaufnahme eines anderen Verbrauchers) zu steuern. Konkret: Zähler 0 soll ein 8 bit PWM Signal generieren und invertiert auf Pin OC0 ausgeben.

2.5. PULS WEITEN MODULATION (PWM) 13 Lösung Schaltung? Code 34 : pwm0.init 35 0 TCNT0 c! \ clear counter 36 [ WGM01 bv WGM00 bv or \ fast pwm mode 37 COM01 bv or COM00 bv or \ inverted output 38 CS01 bv or \ prescaler 8 39 ] literal 40 TCCR0 c! 41 ; 42 hex 43 variable pwm0 44 : pwm0! pwm0 @ OCR0 c! ; 45 46 PORTB 3 portpin: pin_pwm0 47 : pwm0.init.pin 48 pin_pwm0 high 49 pin_pwm0 pin_output 50 ; Diskussion Weiterlesen

14 KAPITEL 2. HARDWARE LASTIGE PROGRAMME

Kapitel 3 software lastige Programme 3.1 Uhrzeit/Kalender, timeup Problem Sie wollen die Zeit in den üblichen Größen Jahr, Monat, Tag, Stunde, Minute, Sekunde verwalten. Die Zeit soll mit timer2 gezählt werden, die Verwaltung der Zeit soll in der Hauptschleife miterledigt werden. Lösung timeup Diskussion aufwendig, aber gut. Weiterlesen Zeit zählen mit timer2 i2c pcf8583 Uhr am i2c Bus 3.2 Das DCF Zeitzeichen empfangen und auswerten 3.3 Die timeup Uhr mit der DCF Uhr synchronisieren 15