The amforth Cookbook english version started

Ähnliche Dokumente
The amforth Cookbook angefangen

Analog-Digital-Converter

Tag 3 Timer, ADC und PWM

Timer. Funktionsprinzip

Autonome Mobile Systeme. Dr. Stefan Enderle

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:

analoge Ein- und Ausgänge

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

Analog-Digital Umwandlung

ATmega169 Chip: Pin-Layout

16-Bit PCA Timer/Counter

AVR-Mikrocontroller in BASCOM programmieren

Erzeugen von PWM-Signalen mit dem Atmel AVR-Mikrocontroller

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

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

Interrupt-Programmierung

V cc. 1 k. 7 mal 150 Ohm

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

Der Magnetfeldsensor HMC5883L

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

Übung "Struktur von Mikrorechnern" (CBS)

Einführung in die Welt der Microcontroller

Lösungen zum Kurs "Mikrocontroller Hard- und Software

Neues vom STRIP Forth-Prozessor

Vorbereitung. Teil D Analog-Digital-Wandler 1

Serie 8: Microcontroller 17./

Ansteuerung eines LCD-Screens

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

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

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

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

Aufgabe A5: Anleitung. Einführung in die Programmierung des Sensor-/ Aktorknotens

Microcontroller Selbststudium Semesterwoche 9

Temperaturmessung mit dem ATmega8

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

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

Übungsaufgaben. Stand

Prinzipen und Komponenten Eingebetteter Systeme (PKES) Sebastian Zug Arbeitsgruppe Eingebettete Systeme und Betriebssysteme

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

Dies und das zu atmega und amforth

Beschaltung eines Mikrocontrollers. Jordi Blanch Sierra Steuerungsgruppe

Arduino und Amateurfunk (1)

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

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

Nachtaktiver Blinker. Ralf Pongratz. 11. November 2012

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

A Channel-Charge-Integrator

Mikrocontrollertechnik C2 Timer. Einführung

ATxMEGA 128 Board 2. Inhalt

AVR-Mikrocontroller in BASCOM programmieren, Teil 3

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

Fachprojekt for Embedded System: Design and Implement Your Own Embedded Systems (2) LS 12, TU Dortmund

WS 2017/18 Viel Erfolg!!

Umbau eines Saug- und Wisch Roboters auf ARDUINO Steuerung

Aufbau eines Assembler-Programms

4-Kanal-Analoglogger für die Regelungstechnik

Puls Weiten Modulation (PWM)

Servo-Modul Version

Mikrocomputertechnik

Entfernungsmesser. für den Raspberry Pi. Tim Riddermann / Nils Wortmann

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

Bootloader FastBoot von Peter Dannegger

Inhaltsverzeichnis VII

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

PeakTech Zeitprogramm erstellen über Excel - Beispiel / Timed programs with Excel Example

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

LED Skalenbeleuchtung mit einem Arduino

Mikrocontrollertechnik

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

Fuses mit BASCOM und USBASP setzen

STM32 - Schieberegister, SPI - u

Jan Monsch. Donnerstag, 2. Mai 13

Ampelsteuerung Merkblatt 2 Wie wird der Arduino programmiert?

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

Starten Sie die Arduino IDE und geben Sie den folgenden Programmcode ein:

11: Echtzeitbetriebssystem ucos-ii

Umstellung eines Outlook Kontos von ActiveSync zu IMAP. Changing an Outlook account from ActiveSync to IMAP

Die AVR Mikrocontrollerfamilie

System-Programmierung 10: Weitere Arten von I/O. CC BY-SA, Thomas Amberg, FHNW (soweit nicht anders vermerkt)

LCD board EB

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

Wozu dient ein Logikanalysator?

Übung 3: VHDL Darstellungen (Blockdiagramme)

Vortrag über die Bachelorarbeit

Anleitung A5. Einführung in die Programmierung des Sensor-/ Aktorknotens BTnode

Application Note. PiXtend mit Hilfe der Control- & Status-Bytes konfigurieren und überwachen. Stand , V1.06

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

Microcontroller Kurs Programmieren Microcontroller Kurs/Johannes Fuchs 1

Parallel-IO. Ports am ATmega128

Laborübung 3. Latches, Flipflops, Counter

Mikrocontrollerplatine vorbereiten

Technische Informatik 1 Übung 5: Eingabe/Ausgabe (Computerübung) Georgia Giannopoulou, ETZ G & 18.

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

Ein-Bit-Rechner 15. Mikrorechentechnik-Grundlagen 29

myavr Programmierung in C

Interrupts im Handbuch des ATmega128 gründlich lesen.

by AS playground.boxtec.ch/doku.php/tutorial Multitasking 4

Einführung DIP & AVR EVK1100

CR2013. CompactModule. E/A-Modul digital und analog für System R 360. CANopen. Schnittstelle. Betriebsspannung V DC.

Transkript:

The amforth Cookbook Author: Datum: Erich Wälde 2010-06-18 english version started

Copyright 2010 Erich Wälde (ew.forth@nassur.net) License: CC-BY-SA Production Notes:

Contents 1 Project with amforth 3 1.1 Board................................ 3 1.2 Sample application......................... 3 1.3 ATMEGA32 register and bit names and addresses......... 3 2 Pins and Ports 4 2.1 lib/bitnames.frt: names for pins................ 4 2.2 configure pins to input/output.................... 4 2.3 set pins to high/low......................... 4 2.4 Hello, world!............................ 4 3 Memory 6 4 Interrupts 7 5 Timer/Counter Subsystem 8 5.1 Ereignisse Zählen.......................... 8 5.2 Zeit zählen mit Timer2 und einem Uhrenquarz........... 8 5.3 Pulsweitenmodulierte Signale erzeugen (PWM).......... 11 5.3.1 PWM Signal erzeugen (fast pwm mode).......... 12 5.3.2 langsames PWM Signal (Servo ansteuern)......... 12 5.3.3 einen Ton auf einem Piezo/Lautsprecher ausgeben.... 12 5.4 Pulsweiten messen......................... 12 6 ADC Subsystem 13 6.1 Analoge Signalpegel ausmessen.................. 13 7 TWI/I2C Subsystem 17 8 SPI Subsystem 18 9 USART Subsystem 19 1

CONTENTS 2 10 Programmstücke 20 10.1 turnkey: wie ein Programm direkt nach dem Einschalten startet. 20 10.2.res: freien/belegten Platz anzeigen................ 21 10.3 timeup: Uhrzeit/Datum....................... 21 10.4 Das DCF Zeitzeichen empfangen und auswerten.......... 21 10.5 Die timeup Uhr mit der DCF Uhr synchronisieren........ 21 11 Assembler und amforth 22 11.1 Assembler Code in amforth einbetten............... 22 11.2 Assembler Code für amforth erzeugen.............. 22 12 Forthiges 23 12.1 bit flags............................... 23 12.2 scaled integer: arithmetische Berechnungen............ 23 12.3 deferred Words........................... 23 12.4 I/O Umleitung (redirection)..................... 23 12.5 sensor: so ne Art Objekt..................... 23 12.6 filter mean: noch so ne Art Objekt............... 23 12.7 Einfach verkettete Liste....................... 23 12.8 Multitasker............................. 23 13 Kommunikation 24 13.1 1wire über i2c mit dem ds2482 controller............. 24 13.2 rs485 über usart0.......................... 24

Chapter 1 Project with amforth This chapter shall describe, how to create a working amforth system on a controller; how to configure the important things like clock speed, usart speed, controller model; which files are used for what purpose and how to customize them (dict.asm files). The goal of this chapter is to have a running amforth system on my controller, happily responding to my keystrokes on the serial console 1.1 Board briefly describe the embedit prototype board mit ATMEGA32, Quarz 11.059200 MHz, and serial console at 115200 baud 1.2 Sample application layout of appl/template and how to use it; This stuff is highly dependant on the particular version of amforth in use. 1.3 ATMEGA32 register and bit names and addresses content of device/atmega32.frt; reference to datasheet 3

Chapter 2 Pins and Ports Howto address port pins, configure them for input/output with/without internal pullup resistors, highz 2.1 lib/bitnames.frt: names for pins PORTB 0 portpin: led_error 2.2 configure pins to input/output $01 DDRA c! $00 PORTA c! led_error pin_output 2.3 set pins to high/low $01 PORTB c! to set high $00 PORTB c! to set low led_error high led_error low 2.4 Hello, world! Tradition demands to make an LED blink as your first programm. We shall make no exception: 1 \ run_hello_world_led.frt 2 PORTB 3 portpin: led_active 3 : ms ( n -- ) 0?do 1ms loop ; 4 : init 5 led_active pin_output 6 led_active high 4

CHAPTER 2. PINS AND PORTS 5 7 ; 8 : run 9 init 10 begin 11 led_active low 12 &200 ms 13 led_active high 14 &800 ms 15 loop 16 ;

Chapter 3 Memory ram,flash,eeprom; which is used for what; related words @ i@ e@! i! e!, briefly explain the memory layout of an amforth system 6

Chapter 4 Interrupts Interrupts in amforth sind anders. Erklären, wie das gemacht ist. Beispiel timer2: kein interrupt bit löschen. Bei anderen Interrupts muß man mit Assembler rumhantieren, Beispiel usart im isr mode. Man kann mit etwas Akrobatik auch die isr in forth schreiben, Beispiel für die Uhr auf dem 168 von Adolf/Michael. Andere Beispiele??? 7

Chapter 5 Timer/Counter Subsystem 5.1 Ereignisse Zählen pins INT0..2 zum Zählen von externen Ereignissen verwenden 5.2 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. 8

CHAPTER 5. TIMER/COUNTER SUBSYSTEM 9 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 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 ;

CHAPTER 5. TIMER/COUNTER SUBSYSTEM 10 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 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

CHAPTER 5. TIMER/COUNTER SUBSYSTEM 11 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. 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 5.3 Pulsweitenmodulierte Signale erzeugen (PWM) Was ist PWM? Wie geht das beim ATMEGA32? Die Zähler des ATMEGA32 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

CHAPTER 5. TIMER/COUNTER SUBSYSTEM 12 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. 5.3.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. Lösung Schaltung? Code Diskussion Weiterlesen 5.3.2 langsames PWM Signal (Servo ansteuern) 5.3.3 einen Ton auf einem Piezo/Lautsprecher ausgeben 5.4 Pulsweiten messen das müsste doch auch gehen

Chapter 6 ADC Subsystem 6.1 Analoge Signalpegel ausmessen Problem Sie wollen eine analoge Spannung mit dem ADC (analog digital converter) ausmessen. Lösung Der ATMEGA32 verfügt über einen eingebauten ADC mit 8 Kanälen und einer Auflösung von 10 bit. Der ADC kann in verschiedenen Konfigurationen betrieben werden. Die Auswahl der Referenzspannung, sowie die Art der Messung (zwischen zwei Pins (differentiell) oder gegen Masse (single ended)) sind nur die wichtigsten Einstellungen. Wir beschränken uns hier auf den Fall, daß die Referenzspannung gleich der Versorgungsspannung ist, daß Pin ADC3 gegen Masse gemessen wird und daß die zu messende Spannung zwischen 0 V und der Versorgungsspannung liegt. Schaltung Versorgungs Spannung als Referenz an AREF zu messende Spannung an ADC3, zum Testen ein Potentiometer anschließen Konfiguration Der Pin muß zum Lesen und ohne pullup-widerstand konfiguriert werden (highz). Der ADC wird über folgende Register konfiguriert. ADMUX: In diesem Register wählen wir zunächst, daß das Ergebnis linksbündig geliefert werden soll (Bit ADLAR=1). Das hat den Vorteil, daß man für eine 8-bit genaue Messung das niedrige Ergebnis-Byte einfach verwirft. Direkt vor der Messung wird hier außerdem die gewünschte Pinauswahl eingegeben. In unserem Fall: Bits MUX4..0 = 00011 13

CHAPTER 6. ADC SUBSYSTEM 14 Außerdem würde man hier die gewünschte Referenzspannung angeben, die default Einstellung Bits REFS1..0 = 00 wählt die an AREF anliegende Spannung als Referenz. ADCSRA: Das ACD status and control register A enthält weitere Steuerbits: Bit ADEN schaltet den ADC ein. Bit ADSC startet eine Wandlung. Wird das Bit zurückgelesen, so ist es 1, solange die Wandlung andauert, und 0 nach dem Ende der Wandlung. Bits ADPS2..0 wählt einen Teiler, der die CPU-Frequenz heruntertaktet. Die resultierende Frequenz wird zur Wandlung benutzt. Setzt man alle drei bits, so ergibt sich ein Teiler von 128. ADCL, ADCH: Diese Register enthalten das Ergebnis der Wandlung. Im linksbündigen Fall stehen die Bits 9..2 im Register ADCH, die Bits 1..0 an den höchsten beiden Stellen von Register ADCL. Die Datei cooklib/adc.frt definiert mehrere Worte, von denen die folgenden für den Gebrauch durch das übergeordnete Programm vorgesehen sind: adc.init: initialisiert das ADC Subsystem wie oben beschrieben. adc.get10: nimmt die Pin-Nummer (bit position als Argument und veranlasst eine ADC Wandlung. Das Ergebnis wird in 10-bit Genauigkeit abgelegt. Die Pin-Nummer ist streng genommen die Kanal-Konfiguration ADMUX4..0, ist aber in diesem Fall identisch mit der Nummer des Pins von PORTA. adc.get: nimmt ebenfalls die Pin-Nummer als Argument und veranlasst eine ADC Wandlung. Das Ergebnis wird in 8-bit Präzision abgelegt. Code Modul/e 1 \ 2010-06-18 EW cooklib/adc.frt 2 3 : adc.init ( -- ) 4 [ 5 bv \ ADLAR: left adjust result 5 ] literal ADMUX c! 6 [ 7 bv \ ADEN: enable ADC 7 2 bv 1 bv 0 bv or or \ prescaler 128 8 or 9 ] literal ADCSRA c! 10 ; 11 12 6 bv constant ADSC_MSK \ Start Conversion bitmask 13 : adc.start 14 \ start conversion 15 ADSC_MSK ADCSRA or! 16 ;

CHAPTER 6. ADC SUBSYSTEM 15 17 : adc.wait 18 \ wait for completion of conversion 19 begin 20 ADCSRA c@ ADSC_MSK and 0= 21 until 22 ; 23 : adc.channel! ( channel -- ) 24 7 and \ clip channel to 0..7 25 ADMUX c@ 7 invert and \ read ADMUX, clear old channel 26 or \ add new channel 27 ADMUX c! \ write 28 ; 29 : adc.get10 ( channel -- a ) 30 adc.channel! adc.start adc.wait 31 \ 10 bit 32 ADCL c@ 33 ADCH c@ 8 lshift + 6 rshift 34 ; 35 : adc.get ( channel -- a ) 36 adc.channel! adc.start adc.wait 37 \ 8 bit 38 ADCH c@ 39 ; Verwendung Code Verwendung 1 \ 2010-06-18 EW run_adc.frt 2 marker --start-- 3 hex 4 5 include cooklib/ms.frt \ ms 6 include cooklib/bv.frt \ bv bv 7 include lib/bitnames.frt \ portpin: pin_highz 8 include cooklib/adc.frt \ adc.init adc.get10 9 10 : portpin>channel ( pinmask portaddr -- bit-position ) 11 drop ( -- pinmask ) 12 bv ( -- bit-position ) 13 ; 14 15 PORTA 3 portpin: poti 16 : init 17 adc.init 18 poti pin_highz 19 ; 20 : run 21 init

CHAPTER 6. ADC SUBSYSTEM 16 22 begin 23 poti portpin>channel adc.get10. cr 24 &1000 ms 25 key? until 26 ; Ausgabe Wenn man run aufruft und ordentlich am Potientiometer dreht, dann kann das z.b. so aussehen: 1 > run 2 512 3 405 4 124 5 182 6 389 7 746 8 1023 9 1023 10 784 11 396 12 55 13 14 14 14 15 ok 16 > Diskussion Das ist nur ein kleiner Fall aus einer Fülle von Móglichkeiten, den ADC zu betreiben. Datenblatt-Studium ist ein Muß! Für die Beschaltung den Analogen Teils sollte man sich auch Mühe geben, sonst misst man hauptsächlich das Rauschen in der Stromversorgung... wort... Erklärung, Grenzen, Erweiterungen, Alternativen Weiterlesen Datenblatt Kapitel ADC

Chapter 7 TWI/I2C Subsystem I2C Peripherie anschließen und betreiben 17

Chapter 8 SPI Subsystem SPI Peripherie anschließen und betreiben 18

Chapter 9 USART Subsystem Erklären, wie das mit der seriellen Konsole funktioniert. atmega644p hat eine zweite serielle Schnittstelle siehe auch I/O Umleitung Hier kann das multi processor communication Ding erklärt werden. siehe rs485 Kommunikation 19

Chapter 10 Programmstücke 10.1 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 20

CHAPTER 10. PROGRAMMSTÜCKE 21 Weiterlesen 10.2.res: freien/belegten Platz anzeigen 10.3 timeup: Uhrzeit/Datum 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 10.4 Das DCF Zeitzeichen empfangen und auswerten 10.5 Die timeup Uhr mit der DCF Uhr synchronisieren

Chapter 11 Assembler und amforth 11.1 Assembler Code in amforth einbetten hier muß der Assembler von Luboš hin, samt ordentlichem Beispiel 11.2 Assembler Code für amforth erzeugen hier kommt der g4 von Michael hin, samt ordentlichem Beispiel 22

Chapter 12 Forthiges 12.1 bit flags 12.2 scaled integer: arithmetische Berechnungen 12.3 deferred Words 12.4 I/O Umleitung (redirection) Anwendung: ein LCD beschreiben 12.5 sensor: so ne Art Objekt 12.6 filter mean: noch so ne Art Objekt 12.7 Einfach verkettete Liste Anwendung: Sensorausstattung als Konfiguration 12.8 Multitasker Erklärung Anwendung: sensoren und Konsole Verheiraten mit turnkey 23

Chapter 13 Kommunikation 13.1 1wire über i2c mit dem ds2482 controller 13.2 rs485 über usart0 24