AVR-Mikrocontroller in BASCOM programmieren



Ähnliche Dokumente
Der I²C-Bus. Vorstellung des Inter-Integrated Circuit -Bus. Aufbau und Funktionsweise. Beispiel PortExpander am Arduino

Chip veraltet, für neue Anwendungen nicht empfehlenswert!

Geschrieben von: Malte Freitag, den 16. Juli 2010 um 21:28 Uhr - Aktualisiert Montag, den 05. Dezember 2011 um 18:09 Uhr

Daten loggen mit der STI100-Platine

8: IIC-Bussystem / PID

Das Attiny-Projekt Der I 2 C-Bus 1. Der I 2 C-Bus

AVR-Mikrocontroller in BASCOM programmieren, Teil 2

I2C-BUS Von Ramesh Sathiyamoorthy Klasse E4p Embedded Control Hr.Felser HTI Burgdorf

Vielleicht weil das Beschleunigungssensor- Modul von ELV so ein Verkaufsschlager war, hat

Bus Manuals SPI I2C. Busse und Sensoren. Twix. Chaos Computer Club Cologne Twix

Beschreibung Modell Motorspindel

Der Magnetfeldsensor HMC5883L

3 Achsen Accelerometer

Die Software zum Unser kleiner Computer

4-Kanal-Analoglogger für die Regelungstechnik

Deutsche Dokumentation von ihrem Elektronik-Lieferanten: Inteligentes Motorboard (12V/6A) mit I2C-Bus

Der I²C-Bus. Bearbeitet von: Thomas Finke, EL5

AVR-Mikrocontroller in BASCOM programmieren

Der Anschluss eines seriellen 16kb EEProms an die I²C Schnittstelle ist denkbar einfach: Hier als Beispiel mit einem ST24C16:

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

Ruecklicht-V1 von Peter Krueger /

Experiment 2: Digital-Analog-Wandler über I2C

Rauschgenerator mit AVR

Die Temperaturmessung mit dem Sensor LM75. Andreas Heller & Eduard Auer

CU-R-CONTROL. Beschreibung zur Schaltung ATMega16-32+ISP MC-Controller Steuerung auf Basis ATMEL Mega16/32. Autor: Christian Ulrich

Nachtaktiver Blinker. Ralf Pongratz. 11. November 2012

SIOSLAB. Technische Daten:

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

Selbstbau-USB-Programmiergerät für AVR

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

Wire.h Library für I2C

Delta-Spezifikation SPC3LV (Mit Referenz auf SPC3)

C-DIAS-Serielles-Interface CSI 021

TM1638-Anzeige-Taster-Modul

Research & Development Ultrasonic Technology / Fingerprint recognition DATA SHEETS OPKUD.

Lego 4 LavA. Entwicklung einer Lego Mindstorms Experimentierplattform für FPGA-basierte, konfigurierbare Multiprozessorsysteme

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

AVR-Mikrocontroller in BASCOM programmieren, Teil 3

DTMF Sender. Es können 252 Zeichen maximal am Stück übertragen werden; die Länge des Strings wird mit einem Byte übertragen.

Ausarbeitung eines Praktikumsversuches zum Design eines 1-Wire-Master-Controllers Falk Niederlein

5 Funktionsbibliothek für den Controller XMC1100

'

USB > I2C- Bus Modul. Startet den I2C-Bus. Daten einlesen NACK senden

Mikroprozessortechnik Grundlagen 1

Für schnelle und bequeme Entwicklungen wird gern Basic eingesetzt.

Einfache SDO-Zugriffe für CANopen-E/A-Module

Die Temperaturmessung

4.2 Peripherie ansprechen in C/I2C-Bus

SERIELLE DATENÜBERTRAGUNG (DMX)

Analog-Digital-Converter

8.0 Erweiterung mit dem 8 Bit D/A Maxim MAX5382

Serielle Kommunikation mit dem Arduino. Teil 1: Das Serial Peripheral Interface (SPI)

Einführung in die Welt der Microcontroller

Allgemein...2. Inbetriebnahme...2. Tastatur-Bedienung Funktions-Matrix...2. Main- und Kanal-Volume-Einstellung...3. Timecode...3

Zusatzanleitung. MPR-1 I²C-Protokoll. Version 1.01

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

A Channel-Charge-Integrator

Miniatur Motortreiber TB6612FNG

Servo-Modul Version

Liniensensor. Sensor 0 Sensor 8

analoge Ein- und Ausgänge

Puls Weiten Modulation (PWM)

Das Eingangstaktsignal kann entweder intern oder extern eingespeist werden.:

LCD board EB

4.0 Der Atmel AT89LPx052 Mikrocontroller

Inhaltsverzeichnis. LNT Fischertechnik RCTXTLT 2 Juni 2017

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

Ansteuerung eines LCD-Screens

I2C-006 DATASHEET I2C-006 V1.00: 1K EEPROM MODUL MIT TWI (I 2 C) SCHNITTSTELLE. Dokument NR.: I2C-006_Datasheet

DMXface ACTIVE SEND mit RS232

Arduino µcontroller. Virtuelle COMSchnittstelle

Hardware Logik-Analysatoren

STM32 - Schieberegister, SPI - u

Computergestützte Ansteuerung digitaler Eisenbahnanlagen

MP /52 Controller Modul

M3120 Incremental-Encoder 4-fach

Fuses mit BASCOM und USBASP setzen

Projektlabor. LCD Ansteuerung

Beschaltung eines Mikrocontrollers. Jordi Blanch Sierra Steuerungsgruppe

Labor Industrielle Netzwerke. Versuch 2: Relais Steuerung durch SPI

Der I 2 C Bus beim 80C552 Microprozessor

Autonome Mobile Systeme. Dr. Stefan Enderle

Stefan Hoffmann. Leichter Start mit BASCOM und myavr

HelvePic32 Breadboard. Internet Data Logger

SIMATIC S5 SIEMENS. MODBUS-Protokoll RTU-FORMAT SIMATIC S5 ist Master. Kurzinformation. Sondertreiber für CP 524 / CP (S5-DOS) S5R004

GRAFIK 128x64 IN 2 GRÖSSEN MIT ST7565. preliminary

/ , DK4AQ Theorie I2C Bus

Mikrocontroller Einstieg ATmega 8

Arduino, IR Fernbedienung dekodieren

Protokoll TID v0.1 ( )

I2C-002 DATASHEET I2C-002 V1.00: I2C PORTEXPANDER MIT PCA8574. Dokument NR.: I2C-002_Datasheet

Hardware PCI-Bus. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg

Hardware PCI-Bus. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg

Transkript:

jean-claude.feltes@education.lu 1 AVR-Mikrocontroller in BASCOM programmieren Der IC-Bus (TWI-Interface) Allgemeines Spezifikationen des IC-Busses: http://www.nxp.com/acrobat_download/literature/9398/39311.pdf Taktraten: 1kHz khz 3.MHz Standard Fast High speed Schaltung: +5V uc Master SDA SCL Slave 1 Slave Slave 3 SDA: serielle Daten SCL: Takt (wird vom Master erzeugt, der Slave kann aber die Low-Phase bei Bedarf verlängern) Pullup-Widerstände: min. Strom 3mA Bei 5V und pf Kapazität sind 1.8K angemessen. Achtung: IC-Geräte die einen Prozessor haben der mit 3V läuft brauchen Pullup-Widerstände nach +3V und nicht nach 5V! Adressen der Slaves: Das erste übertragene Byte ist immer die Adresse. Bits 7...1 Adresse Bit R/W

jean-claude.feltes@education.lu Das niederwertigste Bit enthält das Kontrollbit R/W: Lesen oder Schreiben des Slave: 1 = Lesen = Schreiben Die meisten IC-ICs haben feste Adressen, die im Datenblatt angegeben sind. Oft sind die oberen Bits fest, während die unteren 3 über Jumper festgelegt werden können. Datenaustausch Der Master prüft ob der Bus frei ist (beide Leitungen auf H-Pegel) Der Master erzeugt ein START-Signal: SDA wird auf L gezogen (SCL bleibt auf H) Nun gehört der Bus dem Master. Der Master sendet die Adresse des Slaves. Dieser zieht daraufhin SDA auf L, vom Master wird dies als ACK (Acknowledge) interpretiert. Nun werden 1 oder mehrere Datenbytes gesendet. Der Empfänger quittiert jedes mit ACK ( d.h. er zieht SDA auf L ). Wenn SDA auf H bleibt, interpretiert der Master dies als NAK (Not acknowledged) Am Ende der Übertragung erzeugt der Master ein STOP-Signal: SCL = H, SDA geht von L auf H. Nun ist der Bus wieder frei.

jean-claude.feltes@education.lu 3 Beispiel 1: DA-Wandlung mit PCF8591 Dieser Chip eignet sich gut für erste Experimente, da man sofort ein Ergebnis sehen kann. In den folgenden Beispielen wurden die binären Werte nicht in Spannungen umgerechnet, da hier der Schwerpunkt auf der IC-Übertragung liegen soll. Die Adresse des Chips hat einen festen und einen einstellbaren Teil. Der einstellbare Teil wird über die Eingangspins A, A1, A festgelegt. Ablauf der Datenübertragung: Start-Kondition Adresse senden Kontrollbyte senden (siehe Datenblatt) Datenbyte senden (eventuell auch mehrere) Stop-Kondition Die ganze Abfolge wird nur vom Master gesteuert. Der Slave antwortet auf jedes Byte mit einem Acknowledge, d.h. er zieht die SDA-Leitung auf low.

jean-claude.feltes@education.lu Schaltung zur DA-Wandlung mit Referenzspannung +5V: x 1K8 +5V SDA SDA VDD VREF SCL SCL AOUT Analog OUT Mega8 A A1...5V A EXT Vss OSC AGND 1MHz CLK PCF8591 Achtung: der EXT-Pin muss auf Masse gelegt werden, damit der interne Oszillator funktioniert! Dieser wird für den AD-Wandler als Takt benutzt, aber auch für den Refresh des Puffers am Ausgang (siehe Datenblatt). Am OSC-Ausgangspin ist dann ein 1MHz-Takt messbar. Beispiel-Programm mit Werte-Eingabe über die serielle Schnittstelle: $crystal = 1 $regfile = "m8def.dat" $hwstack = 1 $baud = 9 Config Sda = Portc. Config Scl = Portc.5 Dim I As Byte Do Input "I=", I Print I Gosub Icda Waitms 5 Loop '---------------------------------------------------- Icda: Icstart Icwbyte &B11 Icwbyte &B1 Icwbyte I Icstop Return 'address for write with AA1A= 'control byte with DA enable 'byte for DA Oszillogramme: Hier wurde ein DA-Wert von 5 = 111dual übertragen. Zur besseren Übersicht wurde eine kurze Pause vor jedem ICwbyte-Befehl eingefügt.

jean-claude.feltes@education.lu 5 CH1 u/v - t/us CH u/v - t/us Analyse des Oszillogramms: Adresse 11 Control byte 1 Data byte 5d 111 START CONDITION SCL=1, SDA 1- ACK SDA = vom Slave ACK SDA = vom Slave ACK SDA = vom Slave STOP CONDITION SCL=1 SDA -1 SDA u/v - t/us SCL u/v - t/us Die einzelnen Bits werden in der Reihenfolge MSB LSB übertragen. Die Bitwerte werden mit der ansteigenden Flanke von SCL übernommen. Nach jedem Byte wird ein neunter Taktimpuls vom Mikrocontroller generiert. Zu diesem Zeitpunkt muss der PCF8591 als Slave die Datenleitung auf Low gezogen haben. Dies wird vom Mikrocontroller als Acknowledge interpretiert.

jean-claude.feltes@education.lu Übertragen mehrerer Bytes hintereinander Sind viele Werte zu übertragen, so können diese direkt hintereinander übertragen werden. Eine Stop-Kondition auf dem Bus beendet den Datentransfer. Der Vorteil dieser Methode ist eine schnellere Übertragung. Beispiel für eine sägezahnförmige Ausgangsspannung: $crystal = 1 $regfile = "m8def.dat" $hwstack = 1 $baud = 9 Config Sda = Portc. Config Scl = Portc.5 Dim I As Byte Do Gosub Icda5bytes Loop '---------------------------------------------------- Icda5bytes: Icstart Icwbyte &B11 'address for write with AA1A= Icwbyte &B1 'control byte with DA enable For I = To 55 Icwbyte I Next I Icstop Return 'bytes for DA 5 u/v 3 1-1 1 3 5 t/ms Für dieses Beispiel ergibt sich eine Periodendauer von ca. 8ms, bei Übertragung nach dem Schema des ersten Beispiels wären es ca. 95ms.

jean-claude.feltes@education.lu 7 Beispiel : AD-Wandlung mit PCF8591 Ablauf der Datenübertragung: Start-Kondition (Master) Adresse senden (Master) Achtung: Bit ist jetzt 1 : Lesen Vom PCF8591 kommt ein Acknowledge zurück (SDA auf low) Datenbyte(s) vom PCF8591 empfangen (eventuell auch mehrere) Nach jedem empfangenen Byte schickt der Master ein Acknowledge Will der Master kein Byte mehr empfangen, schickt er kein Acknowledge mehr, d.h. er lässt SDA auf H-Pegel. Stop-Kondition (Master) Da der PCF8591 AD-Kanäle hat, muss eventuell vorher noch durch Schicken eines Control Bytes der gewünschte Kanal ausgewählt werden (im Beispiel Kanal 1). (Es gibt noch interessante Möglichkeiten, z.b. die Kanäle hintereinander zu übertragen, Differenzmessungen usw., siehe Datenblatt). Man muss noch ein wenig aufpassen: nach dem Adressieren führt der PCF8591 eine Messung durch, er überträgt aber den Wert der vorigen Messung. Um den aktuellen Wert zu erhalten, muss man also Bytes übertragen. Beispiel für das Auslesen von Kanal 1: $crystal = 1 $regfile = "m8def.dat" $hwstack = 1 $baud = 9 Config Sda = Portc. Config Scl = Portc.5 Dim X As Byte Dim Y As Byte 'dummy byte for result of last conversion 'result of actual conversion Do Gosub Icad Print X; Print " " Print Y Wait 1 'this gives the result from the last conversion 'this is the actual AD value

jean-claude.feltes@education.lu 8 Loop '----------------------------------------------------- Icad: 'select channel (send control byte) Icstart Icwbyte &B11 'address for write with AA1A= Icwbyte &B11 'control byte with DA enable, channel 1 Icstop 'read from AD Icstart Icwbyte &B111 Icrbyte X, Ack Icrbyte Y, Nack Icstop Return 'address for read with AA1A= 'read byte from last conversion 'read byte from actual conversion Oszillogramme Beim Debuggen mit dem Oszilloskop ist es schwierig, wenn nicht unmöglich, die ganze Impulsfolge anzuschauen. Ein guter Trick ist dabei, einen Portpin als Ausgang zu nutzen und dort ein Synchronisationssignal zum externen Triggern des Oszilloskops auszugeben (Port setzen und zu gegebener Zeit wieder rücksetzen). Dies wurde bei den folgenden Oszillogrammen gemacht, so dass nur der für das Lesen interessante Teil sichtbar ist. SDA 5 3 1-1 - t/ us SCL 5 3 1-1 - t/ us Die gelesenen Bytes waren hier 3 (voriger Wert) und 9 (aktueller Wert). Bei der Analyse des Oszillogramms fällt auf, dass man mit der Interpretation aufpassen muss: trotz Triggerung ist der Beginn des Oszillogramms nicht exakt der Beginn der Start-Kondition, sondern es wird schon ein kleines Stück davor aufgezeichnet. Dies ist möglicherweise von Oszilloskop zu Oszilloskop verschieden.

jean-claude.feltes@education.lu 9 Adresse (Lesen) 111 vom Mikrocontroller Data byte 3d = 1b vom PCF8591 Data byte 9d = 111b vom PCF8591 START CONDITION SCL=1, SDA 1- ACK SDA = vom Slave ACK SDA = vom Slave NACK = No Acknowledge SDA = 1vom Slave Ende der Übertragung SDA 5 3 1-1 - t/ us SCL 5 3 1-1 - t/ us Geschwindigkeit der Übertragung Die Taktrate der Übertragung wird von einer internen Zeitverzögerung gesteuert. Dies ist mit dem Befehl Config Icdelay= n einstellbar. Dabei ist n eine Zahl zwischen und 55. Der Defaultwert 5 soll eine Taktrate von 1kHz ergeben. Gemessen habe ich eine etwas geringere Frequenz mit einer Periodendauer von 1μs. Bei einem Wert von 1 ergab sich eine Periodendauer von etwa μs, wobei einige Perioden zwischendurch verlängert waren. Dies ist nicht verwunderlich da der PCF8591 nur für 1kHz spezifiziert ist. Hardware- oder Software IC? Software IC Standardmäßig bietet BASCOM eine Software-Emulation des IC-Protokolls. Dies hat den Vorteil dass im Prinzip jeder Pin des Controllers als SDA bzw. SCL genutzt werden kann. Es funktioniert also z.b. beim Mega8 nicht nur 'Config Sda = Portc. 'Config Scl = Portc.5

jean-claude.feltes@education.lu 1 sondern auch Config Sda = Portc. Config Scl = Portc.1 Diese Möglichkeit kann von Vorteil sein, wenn man noch genügend freie Pins hat und mehrere Slaves anschließen will, die zufällig die gleiche Adresse haben. Hardware-IC Die modernen Controller haben eine Hardware-IC-Schnittstelle. Diese soll laut BASCOM-Hilfe nutzbar sein, indem man die entsprechende Bibliothek einbindet. Das geschieht mit dem Befehl $lib "ic_twi.lbx" Bei Roland Walter findet sich eine reine BASIC-Ansteuerung der Hardware-IC-Register. IC Bus Scan Oft möchte man wissen, welche IC-Adressen am Bus präsent sind, oder ob ein komplexer Chip überhaupt irgendwie reagiert. In der BASCOM-Hilfe ist eine Methode beschrieben die einfach zu realisieren ist: Es wird für jede gerade Adresse 1 von...5 geprüft, ob es einen Slave gibt, der ein Acknowledge zurücksendet. Dies ist aus der internen BASCOM-Variablen ERR ersichtlich. Wenn ein ACK kommt, ist ERR =.... 'IC Config Sda = Portc.1 Config Scl = Portc. Dim Busaddress As Byte Dim Busaddress_read As Byte Dim Chipaddress As Byte... '------------------------------------------------------------------------------ Scanbus: 'Scan bus for valid IC addresses on bus ' ( test for ACK to come back from Busaddress ) Print Print "Scan start" For Busaddress = To 5 Step 'for all even addresses Icstart 'send start Icwbyte Busaddress 'send Busaddress If Err = Then 'we got an ack Print "Slave at : " ; Busaddress ; "d, = " ; Hex(busaddress) ; "hex" Chipaddress = Busaddress \ Print " with chip address " ; Hex(chipaddress ) ; "h Print End If Icstop 'free bus Next Print "End Scan" Return '------------------------------------------------------------------------------ 1 Jeder Chip belegt Adressen: eine zum Lesen und eine zum Schreiben.

jean-claude.feltes@education.lu 11 Interessante Links http://www.qsl.net/pa3ckr/bascom%and%avr/ic/index.html Chip-Übersicht: http://www.rn-wissen.de/index.php/ic_chip-%c3%9cbersicht Rückmeldungen und Kritik bitte an jean-claude.feltes@education.lu

jean-claude.feltes@education.lu 1 Anhang: Control Byte des PCF8591