zondag 8 december 2013

DIY Arduino-kloon op basis van Attiny2313 bordje.

Doel: Arduino kloon maken van spulletjes die rondslingeren.

Ergens in 2006/2007 heb ik een testbordje gebouwd op basis van een attiny2313. Dit is een goedkopere kleinere versie van de atmega die in de Arduino zit. Het bordje is een zogenaamde AVR2313MOD1 "trainingsbordje" ontworpen door circuitsonline.net gebruiker elrece. Ik heb ooit een printplaatje gekregen van erelce en gebouwd. Eerlijk gezegd ben ik toen niet veel verder gekomen dan een paar knipperende LEDs.

Het bordje is een attiny met een rijtje LEDs, 3 drukschakelaars e.d. inclusief een 10pins ISP aansluiting. Als programmer gebruik ik de usbtinyisp die ik destijds bij adafruit heb gekocht. Gelukkig zijn er win7 x64 drivers te downloaden, zodat deze programmer nog steeds bruikbaar is.

Ik wil de attiny2313 (en attiny85) gebruiken in combinatie met de Arduino omgeving. Daarvoor is een Arduino bootloader nodig. Ik gebruik arduino-tiny. Na installeren (volgens deze aanwijzingen ; uitpakken in \arduino\hardware\ ) moet het bestand "boards.txt" in \arduino\hardware\tiny\ aangemaakt worden op basis van "prospective-boards.txt".

Ik gebruik dit stuk uit boards.txt, met een attiny2313 op internal osc (8MHz/div 8 = 1Mhz).

###########################################################################

attiny2313at1.name=ATtiny2313 @ 1 MHz AVR2313mod1 int osc 

# The following do NOT work...
# attiny2313at1.upload.using=avrispv2
# attiny2313at1.upload.using=Pololu USB AVR Programmer

# The following DO work (pick one)...
#attiny2313at1.upload.using=arduino:arduinoisp
attiny2313at1.upload.protocol=USBtinyISP
# attiny2313at1.upload.using=pololu

attiny2313at1.upload.maximum_size=2048

# Default clock (slowly rising power; long delay to clock; 8 MHz internal; divide clock by 8)
# Int. RC Osc. 8 MHz; Start-up time: 14 CK + 65 ms; [CKSEL=0100 SUT=10]; default value 
# Divide clock by 8 internally; [CKDIV8=0]
# Brown-out detection disabled; [BODLEVEL=111]
# Serial program downloading (SPI) enabled; [SPIEN=0]
# Preserve EEPROM memory through the Chip Erase cycle; [EESAVE=0]

attiny2313at1.bootloader.low_fuses=0x6C
attiny2313at1.bootloader.high_fuses=0x9F
attiny2313at1.bootloader.extended_fuses=0xFF
attiny2313at1.bootloader.path=empty
attiny2313at1.bootloader.file=empty2313at1.hex

attiny2313at1.build.mcu=attiny2313
attiny2313at1.build.f_cpu=1000000L
attiny2313at1.build.core=tiny

###########################################################################

De fuses van de attiny2313 staan op: lfuse = 0x64 hfuse=0x9f efuse=0xff
instellen via:

avrdude -c usbtiny -p t2313 -U lfuse:w:0x6c:m -U hfuse:w:0x9f:m -U efuse:w:0xff:m

Dan board kiezen in Arduino IDE en bootloader branden. EDIT: De arduino IDE blijkt ook de fuses in te stellen bij het branden van de bootloader (zie bovenstaande boards.txt). Daarom wordt de lowfuse van 64 naar 6c verandert. (van internal naar external oscillator). Zucht! Daar gaat/ging het dus mis met mijn eerder breadbord dingetjes. EDIT: lowfuse 0x64 = 1Mhz (8mhz int osc div 8) en 0xe4 is 8Mhz).

Fuses uitlezen:
avrdude -p t2313 -c avrisp -P COM3 -b 19200 -U lfuse:r:-:h

TODO: Controleren of het ook werkt met de interne oscillator (zodat het werkt op breadbord).

Daarna de standaard "hello world!" Arduino sketch gekozen. LED op pin 6 gekozen en naar het bordje gestuurd en "JA!" een knipperende LED.


Het AVR2313MOD1 bordje met de usbtinyisp programmer (en voeding).

(Eerlijk gezegd ging het niet zo vloeiend: Eerst op een breadbord geprobeerd, maar geen attiny2313 gedetecteerd. Toen het avr2313mod1 bordje voor de dag gehaald en geprogrammeerd met avrdude. Dat werkte tenminste. Daarna de hele Arduino zooi geinstalleerd, behoorlijk zitten prutsen met de fuses, boards.txt e.d. en uiteindelijk een bootloader en sketch gebrand. Maar die leek het niet te doen. Uiteindelijk bleek ik een verkeerde uitgang in Blink te hebben gekozen. Dwz een uitgang waar geen LED aanzit... doh!)

Dit plaatje heeft uiteindelijk veel geholpen: (En dit blog is er juist voor om dit soort dingen te kunnen terugvinden).
(bron)

Enfin. Nu dus een werkende Arduino omgeving.

Nu eerst een seriƫle verbinding aan de gang krijgen voor de Arduino bootloader. Daarvoor heb ik een max232 nodig (Moet ik ergens hebben) om een USB seriele kabel te kunnen gebruiken. Een FTDI of kloon kopen van ebay duurt te lang. Wellicht kan ik usbtiny aan de gang krijgen om een USB verbinding over de UART op te zetten.

Wordt vervolgd...

Geen opmerkingen:

Een reactie posten