ATmega op het web (1)



Vergelijkbare documenten
ES1 Project 1: Microcontrollers

Pulse generator. Output compare. Timer/Counter0. T/C0 count-ingang. T/C0 Output Compare. Microcontroller Programmeren in C. MICPRG 15 januari 2014

Elektronische dobbelsteen met de ATtiny2313

Raspberry Pi HCC- Haaglanden Tim Woldring

Seriële bluetooth verbinding ATmega128

consolewd op de raspberrypi installeren en gebruiken (versie )

AVR-DOPER MINI ASSEMBLAGE HANDLEIDING + LAYOUT. Geschreven door: Tom Vocke

Microcontrollers. Bart Kardinaal E Verslag microcontrollers Rev 1.0 Status definitief.

Technology, Innovation & Society Delft

Aanmelden Na installatie wordt de service automatisch gestart en kunt u meteen aanmelden van op afstand:

Raspberry Pi Plex server installeren

WORKSHOP ORANGE PI & PYTHON v september 2017

Arduino CURSUS. door Willy - 09-juni-2017

Raspberry pi snel start handleiding

Tinyserir-RC5. Datasheet. Tinyserir-RC5 Page: 1 of 8

A Quick Start Guide: AVR programmeren

Handleiding voor installatie en gebruik van

MiniPlex-41 NMEA-0184 multiplexer Handleiding

Locobuffer Handleiding

Friesland College Leeuwarden

Raspberry Pi recepten

Installatie van Raspberry PI 9 november 2017 HCC Linux GG Zevenaar

ES1 Project 1: Microcontrollers

Raspberry Pi de eerste stappen.

Uitleg van de Systeeminstellingen in Ubuntu.

Cursus Raspberry PI door: Mitchell Verbruggen

Microcontrollers. Robert Langenhuysen, PA0RYL

1. Sluit de LED aan zoals afgebeeld 2. Sluit de USB-kabel aan op de Arduino 3. Klik op de knop uploaden 4. De LED begint te knipperen

Projectwerk microcontrollers:

ES1 Project 1: Microcontrollers

Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368

S88XPressNetLI v1.0. Installatie- en gebruikershandleiding en naslagwerk KDesign Electronics, PCB ontwerp door RoSoft

Ladibug Document Camera Image Software Gebruikershandleiding

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files

HANDLEIDING INFOBOARD SOFTWARE

Linux Server Back-up Online

De Arduino-microcontroller in de motorvoertuigentechniek (3)

VEELGESTELDE VRAGEN. 1. Hoe start de FixMeStick voor Mac? 2. Hoe start de FixMeStick voor Windows? 3. Hoe start de FixMeStick vanuit BIOS?

Werkomgeving. Android Studio. Android - werkomgeving 1/6

b. verbind je laptop ook met het smartboard via de usb kabel. Deze kabel sluit je aan op het usb kabel aan de rechterkant van het bord.

Programmering Tiny45 voor de DCC locdecoder

HANDLEIDING VIEW DESKTOP. Handleiding VIEW Desktop. P. de Gooijer. Datum: Versie: 1.3

DE ASTRO PI PROGRAMMEREN VOOR MISSION ZERO

-Een stukje geschiedenis van de PC (personal computer)

VirtualBox: hoe werkt het?

Online c++ leren programmeren:

B3C 70cm converter besturing. v PE5PVB bar.net bar.net

De Arduino-microcontroller in de motorvoertuigentechniek (4)

RPi meet energieverbruik Met Python, PHP en MySQL

Raspberry Pi prototyping-board

Programmeren van de Raspberry Pi.

Gebruikershandleiding MJK Link 2.15 Index

Om een ander voorbeeld aan te halen waar er wel een opsplitsing van toepassing is:

Handleiding experimentele software/firmware flashen op een TYTERA MD380 Manual to install experimental firmware on a TYTERA MD380

Snel beginnen Starter System 3.2

GEÏNTEGREERDE PROEF. VTI Sint-Laurentius. Pakketweegschaal. Industriële informatie & communicatietechnologie SCHOOLJAAR

Deze handleiding geeft uitleg over de installatie van hard- en software van HTvision V.O.F.

Permanente netwerkverbinding leggen naar je NAS

Opencockpits FMC V3 Handleiding Prosim737

1. Kopieer de bestanden die in de html directory staan, naar de html directory van HomeSeer.

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (3)

Firmware Upgrade. Upgrade Utility (Router Tools)

DDS chips. DDS = Direct Digital (frequency) Synthesis. Output = sinusvormig signaal. Maximum frequentie = ½ klokfrequentie

Linux Mint 10 installeren op een pc of laptop.

Windows Training voor 50-plussers. PC50plus trainingen Eikbosserweg AK Hilversum tel:

Microcontrollers. Week 5 Introductie microcontroller Jesse op den Brouw (met dank aan Ben Kuiper) INLMIC/

EmSE presentatie. Starten met de ATtiny2313: Een RGB powerled driver Kees Moerman, 13 juli 2010

Korte handleiding Windows 8.1

WBelectronics. Infinity USB Phoenix - Handleiding

Wat is Arduino? Arduino = microprocessor (Atmel)

Friesland College Leeuwarden

Microcontrollers Week 5 Interrupts, Timer/Counter 0 Jesse op den Brouw INLMIC/

Wat heb je nodig: Software: Installeren RaspberryPi

Firmware Upgrade Utility

Installatie van Linux Mint 13

DE ASTRO PI KLAARMAKEN VOOR GEBRUIK

Een typisch programma in C en C++ bestaat uit een aantal onderdelen:

Raspberry Pi VOOR KIDS. Richard Wentk

Handleiding software USB PIC DEV. BOARD

Optibel Breedband Telefonie Installatie- en Gebruikershandleiding

Inloggen in AccountView online voor Mac OS 30 april 2015 versie 9.1 en hoger

Bouwbeschrijving UniSAI

Handleiding: CitrixReceiver installeren voor thuisgebruik.

Gebruiksaanwijzing AVR910 USB Programmer

Een database gebruiken

nulmodem Figuur 1 Nulmodem

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python.

MotorControl gebruiksaanwijzing V3 vanaf softwareversie 2.0e

INTRATONE Gebruiksaanwijzing 1 knop met 9 toetsenbord deurtelefoons

De seriële poort Jan Genoe KHLIM

Velbus DIN-rail RS232 & USB interface

Palmtop - Aqua-Max Servicehandleiding

Handleiding Office 365 en Office 2016

Configureren en installeren OPENOB op Raspberry PI

Firmware Upgrade. Upgrade Utility (Router Tools)

Raspberry Pi met de mediasoftware XBMC

Thuiswerken bij Groenhuysen

TECHNISCHE HANDLEIDING AVISTAR 1.1 SERVER- en CLIENTPANEEL. 1 Inleiding blz Montage/ophanging paneel blz. 3

Espa 443 Converter. Beschrijving van de Espa 444 naar Espa 443 Converter.

Transcriptie:

ATmega op het web (1) Raspberry Pi als internet-bridge Dieter Holzhäuser (Duitsland) Via internet met een microcontroller communiceren is niet moeilijk. Wat u nodig hebt is een pc of een smartphone met internet en een tweede computer die serieel met een ATmega is verbonden. In deze serie presenteren we een systeem waarbij een WiFi-router voor een LAN zorgt en een Raspberry Pi dient als brug naar internet. In dit eerste deel bespreken we het basisconcept en de hardware. ook voorgeïnstalleerd op een GB Μicro-SDkaartje kopen, waarop dan nog zo n GB vrij is voor eigen gebruik. Raspbian Wheezy heeft een grafische gebruikersinterface. Het is beslist verbazingwekkend dat je zoiets op zo n klein ding al kunt draaien, maar wij gebruiken de commandoregel-interface, hierna aangeduid als shell. U komt in de shell met LXTerminal of als u de grafische interface afsluit. U kunt RPi zo instellen dat u met Autostart meteen in de shell komt. Daartoe geeft u het commando: sudo raspi-config Figuur 1. Een Raspberry Pi in gebruik. Mocht u het gemist hebben: de Raspberry Pi (RPi) is een eenvoudige Linux-pc ongeveer ter grootte van een creditcard. De huidige RPi model B (figuur 1) beschikt over 51 MB werkgeheugen en een ethernet-poort, en kost nog geen 50. Hij heeft een HDMI-uitgang voor een beeldscherm en twee USB.0-poorten voor toetsenbord en muis. Via een micro-usb-poort sluit u de voeding aan. RPi verstookt maar zo n W, dus het kost u geen vermogen (in geld) als u hem altijd aan laat staan. Dat maakt hem zeer geschikt als webserver, want een webserver die vanwege de energiekosten maar af en toe beschikbaar is heeft immers weinig zin voor de rest van de wereld. OS & Co. Raspbian Wheezy is zo n beetje de meest populaire Linux-distributie voor RPi en gratis via internet verkrijgbaar []. U kunt dit systeem U moet hiervoor superuser- of root-rechten hebben, vandaar sudo. De rest wijst zich vanzelf. In de regel: boot_behaviour Start desktop on boot? gaat u met de Tab-toets naar <Select> en dan met Enter naar de vraag: Should we boot straight to desktop? <Yes> <No> Kiest u hier <Yes> dan komt u na opstarten altijd op het bureaublad, met <No> krijgt u een commando-prompt met een login. Daarna kunt u alsnog naar het bureaublad met het commando startx. We hebben het in dit artikel uitvoerig over het concept terminal als bedieningsorgaan voor een computer, dus we staan eerst even stil bij wat basisbeginselen. De communicatie tussen de shell en uw terminal is niets anders dan het over en weer uitwisselen van tekenreeksen. Wat voor terminal dat is en op welke manier die met de Raspberry Pi is verbonden, maakt in het 0 maart 01 www.elektor-magazine.nl

ATmega op het web gebruik niet uit. Binnen Linux wordt elk karaktergebaseerd toestel aangeduid als tty, van teletypewriter of kortweg teletype. Gezien vanuit Linux praat je dan niet alleen over de terminal zelf, maar ook over de poort op de computer waarop die terminal is aangesloten. RPi inrichten als een terminal die van deze poort gebruik maakt. Dat wil zeggen dat alles wat wij invoeren via het toetsenbord van de RPi direct via deze poort naar buiten toe gaat en alles wat we op die poort binnenkrijgen op de RPi-monitor moet verschijnen. Seriële poort Die lokale terminal-poort, waarop in ons geval het beeldscherm en het toetsenbord zijn aangesloten, is niet een enkele, van buitenaf fysiek zichtbare poort op de terminal, want we gebruiken USB voor het toetsenbord en HDMI voor het beeldscherm. Maar de Raspberry Pi is wel degelijk voorzien van zo n poort. Bij het opstarten wordt namelijk een aantal pennen van de -pens pinheader op het RPi-kaartje geconfigureerd als seriële terminal-poort; sluit u daarop een ouderwetse domme terminal aan, dan kunt u zich daarmee aanmelden bij de shell. Maar dit doen wij nu niet. Wij willen via deze poort een ATmega in de rol van computer met de RPi in de rol van terminal laten communiceren. Daar zijn twee dingen voor nodig. Ten eerste moeten we die opstartconfiguratie als terminalpoort uitschakelen. Ten tweede moeten we de De opstartconfiguratie moeten we aanpassen in twee tekstbestandjes en dat doen we met de editor nano, ook weer met superuser-rechten: sudo nano /etc/inittab Aan het eind van deze file vindt u een regel die er ongeveer zo uitziet: T0::respawn:/sbin/getty -L ttyama0 11500 vt100 Met een hekje # vooraan deze regel maakt u er commentaar van. Daarmee heeft de seriële terminal-poort, binnen Linux bekend onder de naam ttyama0, niets meer met terminal-communicatie te maken. Sla op en sluit nano. Daarmee zijn we er nog niet, want bij het opstarten krijgt die poort nog steeds een taak toegewezen en dat willen we niet. Het andere tekstbestandje openen we zo: sudo nano /boot/cmdline.txt 10 0 9 0 9 7 5 AREF RST PA0(ADC0) PA0(ADC1) PA(ADC) PA(ADC) PA(ADC) PA5(ADC5) PA(ADC) PA7(ADC7) IC1 A PC7(TOSC) PC(TOSC1) PC5(TDI) PC(TDO) PC(TMS) PC(TCK) PC1(SDA) PC0(SCL) 9 7 5 P1 5 1 Raspberry Pi 19 17 15 1 11 9 0 1 1 1 1 10 7 5 1 70R R LED1 GND K1 ISP MOSI R1 10k 1 MISO SCK 5 RESET C1 100n 1 5 7 ATMEGA-P PB0(XCK/T0) PD0(RXD) PB1(T1) PD1(TXD) PB(INT/AIN0) PB(OC0/AIN1) PD(INT0) PD(INT1) PB(SS) PD(OC1B) PB5(MOSI) PD5(OC1A) PB(MISO) PD(ICP1) PB7(SCK) PD7(OC) GND XTAL1 XTAL GND 11 1 1 1 1 15 1 17 1 19 0 1 70R 1k R R 101-11 Figuur. Seriële verbinding tussen ATmega en RPi. www.elektor-magazine.nl maart 01 1

Listing 1: suidemo1.c 1 #include <avr/interrupt.h> #include <avr/io.h> #define BAUDCODE 1 //.00 Baud @ 1 MHZ 5 #define INITLED DDRB = DDRB 1<<; #define TOGGLELED PORTB = PORTB ^ 1<<; 7 #define ISLEDON PORTB & 1<< 9 unsigned int cycle = 500; 10 unsigned long clock = 0; 11 unsigned long old = 0; 1 unsigned char chr; 1 unsigned char ontxt [] = "\r1 5 *** "; 1 unsigned char offtxt [] = "\r1 5 "; 15 unsigned char * ptxt; 1 17 ISR ( TIMER0_COMP_vect ){ //Interrupt Service Routine Timer 1 if (!(clock++ % cycle) ) { 19 TOGGLELED 0 if (ISLEDON) ptxt = ontxt; else ptxt = offtxt; 1 UDR = *ptxt ; } } 5 ISR ( USART_TXC_vect ) { //Interrupt Service Routine Transmit ptxt++; 7 if (*ptxt!= 0) UDR = *ptxt; } 9 0 ISR ( USART_RXC_vect ) { //Interrupt Service Routine Receive 1 chr = UDR; if (clock - old > 50) { old = clock; if (chr == 5 ) cycle = 500; 5 else if (chr == 1 ) cycle = 100; } 7 } 9 int main(void) { 0 TCCR0 = 0x0; // Init Timer CTC-Mode 1 TCCR0 = TCCR0 0x0; //Prescaler: 1 MHz: = 15 khz, 0x0; 1 MHz: = 50 khz, 0x0 OCR0 = 1; //Compare 1 MHz: 1; 1 MHz: 9 TCNT0 = 0; //TimerCounter on 0 TIMSK = 1<<OCIE0; //enable CTC-Interrupt Timer0 5 UBRRH = (unsigned char) (BAUDCODE >> ); //Init USART UBRRL = (unsigned char) BAUDCODE; 7 UCSRB = UCSRB (1<<RXEN) (1<<RXCIE) (1<<TXEN) (1<<TXCIE) ; sei(); //Enable Interrupts 9 INITLED 50 while (1) ; 51 return 0; 5 } maart 01 www.elektor-magazine.nl

ATmega op het web Hier vindt u onderstaande tekst: dwc_otg.lpm_enable=0 console=ttyama0,11500 kgdboc=ttyama0,11500 console=tty1 root=/dev/mmcblk0p rootfstype=ext elevator=deadline rootwait De truc is nu dat we de toewijzing aan ttyama0 ongedaan maken. Dit moet het worden: dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p rootfstype=ext elevator=deadline rootwait Als u hebt opgeslagen en afgesloten moet u opnieuw opstarten. Willen we nu de RPi als terminal laten fungeren, dan moet dat met een programmaatje voor terminal-emulatie. Daar zijn er vele van, wij kozen voor picocom. Dit moeten we downloaden en installeren, als volgt: sudo apt-get install picocom Als u enter geeft en daarna bevestigt, verloopt de installatie verder automatisch. Bij het gebruik van picocom moet u opgeven wat de baudrate is en aan welke tty-poort picocom zich moet melden: picocom -b 00 /dev/ttyama0 de seriële poort van de ATmega. We hoeven voor ons programma in de ATmega dus alleen de baudrate in te stellen en op te geven dat we pen 1 voor RxD en 15 voor TxD willen gebruiken. Bij het experimenteren is het handig als we de ATmega met bijbehorende componenten onderbrengen op een stukje gaatjesprint, zoals in figuur. Met welgeteld twee componenten aan de reset-ingang, R1 en C1, laten we de ATmega draaien op zijn interne klok van 1 MHz. Figuur. De ATmega op gaatjesprint. Met -b 00 de baudrate, en /dev/ttyama0 het apparaatbestand (in goed Linux: device file ) van de hierboven vrijgemaakte teletype. Dit commando hoeft u niet elke keer in te tikken, met pijltje-omhoog of -omlaag wandelt u door de commando-historie heen en geeft u gewoon enter als de gewenste regel voorstaat. Linux onthoudt een deel van die commando s, ook na een reboot. Voor een eerste test maken we nu eerst een eenvoudige loopback-verbinding: op de -pens pinheader verbinden we TxD op pen met RxD op pen 10, zie figuur. Wat u nu intikt, moet op het beeldscherm verschijnen. Als dit werkt, dan kunt u picocom afsluiten met control-a-x. ATmega Als we twee apparaten via deze poort met elkaar willen laten communiceren, dan moeten ze allebei dezelfde communicatieparameters gebruiken. Op de simpele seriële poort van de Raspberry Pi kunt u alleen de baudrate instellen, de rest ligt al vast op databits, geen pariteitsbit, één stopbit en geen flow-control. Dit zijn toevallig ook de default-instellingen van picocom en van Via de -polige header K1 kunnen we een programmer aansluiten, bijvoorbeeld de AVRISP mkii. Op internet [] zijn er handleidingen te vinden voor het inrichten van een ontwikkelomgeving. De Tx/Rx-pennen van de microcontroller verbinden we met de overeenkomstige pennen op de pinheader van de RPi. Met de spanningsdeler R/R zorgen we ervoor dat het signaalniveau aan de kant van de RPi niet hoger dan, V wordt. De ingangen van de RPi zijn helaas niet bestand tegen TTL-signaalniveaus. Tenslotte hebben we nog een LEDje aangesloten aan pen 5 (PB) van de ATmega, waarop we straks enige activiteit van een klein C-programmaatje kunnen zien. Programma suidemo1.c Het programmaatje suidemo1.c in listing 1 is bedoeld als demonstratie en om mee te experimenteren. Naast de hoofdlus main zijn er drie interrupt-service-routines (ISR s). Het programma laat de LED met twee verschillende frequenties knipperen. De ATmega stuurt karakters uit die op het RPi-beeldscherm worden www.elektor-magazine.nl maart 01

weergegeven bij wijze van kleine user-interface waarmee de toestand van de LED wordt gevisualiseerd en waarmee de gebruiker tussen de twee knipperfrequenties heen en weer kan schakelen. In de regels 0 t/m wordt Timer0 zodanig geïnitialiseerd dat de routine TIMER0_COMP_vect wordt opgeroepen met een frequentie van 1 khz. Deze routine verhoogt de teller clock, die als een soort interne klok dient. Met behulp van de variabele cycle wordt de knipperfrequentie van de LED (regel 1 en 19) afgeleid van clock. Pointer ptxt wijst naar de tekst die de toestand van de LED weergeeft en die over de seriële poort naar de RPi verzonden wordt (regel 0). Het verzenden begint door het eerste teken van de tekst in register UDR te schrijven (regel 1). De routine USART_TXC_vect zorgt voor het verzenden van de overige tekens. Deze routine wordt automatisch gelanceerd zodra het verzend-schuifregister leeg is en dat levert een interrupt op. Dit is de reden dat deze ISR niet het allereerste, maar alleen het tweede en verdere tekens van de tekst verzendt. De tekst is afgesloten met een eind-nul, waarmee de routine stopt (regel 7). ISR USART_RXC_vect wordt opgeroepen telkens als er een volledig teken afkomstig van het terminal-toetsenbord ontvangen is. Als eerste moeten we dan het register UDR uitlezen (regel 1). Wordt er meer dan één karakter gestuurd (als er een toets ingedrukt gehouden wordt), dan kunnen we dat zien aan de frequentie waarmee de karakters binnenkomen. Dit maakt voor het programma niet uit: als het tijdsinterval waarmee we karakters binnen krijgen veel korter is dan normaal, dan gooien we het overtollige teken gewoon weg (regel ). Alleen de toetsen 1 en 5 hebben een bijzondere betekenis, want hiermee veranderen we de variabele cycle en daarmee de knipperfrequentie van de LED (regels en 5). Voordat we de seriële poort kunnen gebruiken, moeten we die eerst initialiseren (regels t/m ). De baudrate stellen we in met een bepaald getal in de registers UBRRH en UBRRL. Dat getal hangt af van de klokfrequentie van de ATmega (voor meer informatie zie de datasheet []). Bij een klok van 1 MHz kunnen we niet sneller dan 00 baud gaan. Verder moeten we bits zetten waarmee we het zenden en ontvangen en de interrupts activeren. De bits van register UCSRC (Control and Status) hebben na een reset een zodanige waarde dat het frame-formaat klopt (databits, stopbits, pariteit, enz.). Vanaf regel 50 start een eindeloze lus. Daarna wordt het programma bestuurd door Timer0- events en door toetsen op het toetsenbord. De seriële user-interface reageert alleen op de toetsen 1 en 5 en geeft op een enkele regel op het terminal-beeldscherm de huidige toestand van de LED weer. Licht de LED op, dan ziet dat er zo uit: 1 5 *** Hiermee hebben we een afstandsbediening waarmee we een ATmega via een seriële poort kunnen aansturen. In de volgende aflevering van deze miniserie laten we zien hoe we de combinatie RPi en ATmega in een LAN kunnen opnemen en vervolgens hoe we die van overal ter wereld via internet kunnen aansturen. (101) Weblinks [1] Website van de auteur: www.system-maker.de [] Download Raspbian Wheezy: www.raspberrypi.org/downloads [] Handleidingen voor de IDE en programmers (Duits): www.system-maker.de/avr.html [] Datasheet voor ATmega: www.atmel.com/devices/atmega.aspx [5] Elektor-pagina bij dit artikel: www.elektor.nl/101 maart 01 www.elektor-magazine.nl