FabLab Academy 2012
Manchester Lab
David Forgham-Bailey
Weekly Assignment:
The task this week was to read the Data Sheet for the ATTINY 44a,
then
program the modified hello board which we made in week 7 using a number
of programming languages.
Narrative:
I had a feeling that my original board was defective, and while
attempting to resolder, the tracks began to lift from the backing
board. So, I took the opportunity to redesign the board in Eagle, and
mill a replacement with the Roland Modela. This time I fitted a new tip
to the soldering iron and found stuffing the board much easier. The
board worked first time.
I used the Arduino Program first, following the detailed tutorial to
establish that the system was working. This was relatively straight
forward. I ran the bootloader ahving set the board to ATTINY44 @20mhz
and the programmer to USBtinyISP. Then I wrote a simple routine
of my own to make the LED Fade in and out when powered up, and change
to Blink when the button is pressed:
/*
button_led_blink_fade
Turns on and off a light emitting diode(LED) connected to
digital
pin 7 (6tiny), LED blinks when pressing a pushbutton attached to
pin 3 (10tiny).
fades in and out when button released
The circuit:
* LED attached from pin 7 to ground - attiny44 pin 6
* pushbutton attached to pin 3 from +5V -attiny44 pin 10
* 10K resistor attached to pin 3 from ground
created 2012
by dfb
*/
// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 3; // the number of the
pushbutton pin
const int ledPin = 7; // the number
of the LED pin
// variables will change:
int buttonState = 1; //
variable for reading the pushbutton status
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the
LED by
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void loop(){
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;
// reverse the direction of the fading at the ends of the fade:
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
// wait for 2 milliseconds to see the dimming
effect
delay(2);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == LOW) {
digitalWrite(ledPin, HIGH); // set the LED on
delay(250);
// wait for a second
digitalWrite(ledPin, LOW); // set the LED off
delay(500);
// wait for a second
}
else {
// turn LED off:
analogWrite(ledPin, brightness);
}
}
Next I used a Terminal on my Mac and used gavrasm and avrdude to
compile the hex file and program the chip.
Assembly language program:
prog name (describe the process)
copyright info
Hardware info
Ports and Pins
Register Definitions
Macros
Interrupt Routines
Sub Routines
Main Program
commands:
gavrasm program_name.asm
- creates program_name.hex
avrdude -p t44 -c usbtiny -u flash:w:program_name.hex
- command line to program the chip
avrdude -p t44 -c usbtiny -u lfuse:w:0x7E:m - to set
the fuses.
Comments:
Software: - I also tried AVRStudio ( I dug out my
old Windows laptop and installed AVRStudio)
Hardware:
Materials:
Machine Settings:
Photos:
Files:
Drawings:
External Links:
Course Notes:
von Neuman - software that can
RISC - Reduced Instruction Set - /speed and predictable timing/
CISC
microprocessor
desktop
FPGA (GATES)
microcontroller - many different types of memory - I/O - system on a
chip
RISC Microcontrollers - (ATTINY44A) -
register - used when doing instructions
SRAM - saving/stores dynamic
DRAM -
EEPROM - stores when switched off
FLASH - Non -volatile - programs
fuse - for configuration - sets up processor
peripherals - word size - families -
ATMEL AVR - designed from ground up - RISC instruction set - DCC
directly supports AVR - GOOD instuction set - WIDE FAMILY form cheao
and small to big and complex -
DATA SHEET
packages - DIP / SOT / SOIC (small outline)
clocks - RC / ceramic / quartz (best resolution)
programmers
ISP / ICE (in-circuit emulation) / JTAG debugwire - realtime acess to
processor sets up breakpoints etc / debugging in the system /
bootloader - programme which loads programmes
AVR Libc
gcc - install these in Linux avr-libc/binutils/gcc-avr (c development
environment)
host communication RS232 / Kermit minicom / FTDI cable (RS232 to USB)
languages - c / c with interupts / assembly /
IDE _Integrated Development Environment
AVRStudio - Eclipse - Arduino -(set of c libraries - IDE - lets you
program and load - boot loader - standard set of boards)
david mellis - arduino
interpreters - Python / Basic / Forth / AVRSH
Eddies lecture -
registers - address in hex content in binary - *.asm (assembly
language)