This week was about learning to output signals in form of wave or movements
Some of the question raised were:
- How to optimize a board for an output?
- Which possibilities lie in one output device ?
I mainly used 1 workflow:
Arduino IDE > avrdude
My biggest achievement: Making and debugging the Charlieplexing board
My biggest struggle: The servo motor board short-circuiting
FTDI convertors/cables | Soldering kit for smd components | H-bridges | Female to female cable |
Thursday | Friday | Sunday | Monday | Tuesday |
---|---|---|---|---|
Checking the powering and the FabISP | Group project harmonization | Documentation | RGB | Servo |
red led PMW | CharliePlexing | Documentation | Documentation |
Softwares | Fonction |
---|---|
Lightbox pluggin | Jquery photo display |
int main(void)
{
DDRA |= (1 << PA7); // PWM output on PA7
TCCR0A = (1 << COM0A1) | (1 << WGM00); // phase correct PWM mode
OCR0A = 0x10; // initial PWM pulse width
TCCR0A = (1 << CS01); // clock source = CLK/8, start PWM
while(1)
{
// change PWM pulse width every 2 seconds
_delay_ms(2000);
OCR0A = 0x10;
_delay_ms(2000);
OCR0A = 0x30;
_delay_ms(2000);
OCR0A = 0x50;
_delay_ms(2000);
OCR0A = 0xA0;
}
}
DDR | TCCR0 | COM0 | WGM00 | CS0 | OCR0 |
---|---|---|---|---|---|
Port Data direct register | Time counter control register | Compare output mode | Waveform generation mode | Clock selection | Output compare register |
CLKPR | CLKPCE | CLKPS |
---|---|---|
Clock prescaler register | Clock prescaler change enable | Clock prescale bits |
The connection went smoothly.
At the first try not all the Led lit up. It took me some times to fix it mainly by resoldering. I noticed that packets of solder can turn to be insulating.
#include <avr/io.h>
#include <util/delay.h>
#define output(directions,pin) (directions |= pin) // set port direction for output
#define input(directions,pin) (directions &= (~pin)) // set port direction for input
#define set(port,pin) (port |= pin) // set port pin
#define clear(port,pin) (port &= (~pin)) // clear port pin
#define pin_test(pins,pin) (pins & pin) // test for port pin
#define bit_test(byte,bit) (byte & (1 << bit)) // test for bit set
#define led_delay() _delay_ms(1) // LED delay
#define led_port PORTA
#define led_direction DDRA
#define A (1 << PA1) // row 1
#define B (1 << PA2) // row 2
#define C (1 << PA3) // row 3
#define D (1 << PA4) // row 4
#define E (1 << PA5) // row 5
void flash(uint8_t from, uint8_t to, uint8_t delay) {
//
// source from, sink to, flash
//
static uint8_t i;
set(led_port,from);
clear(led_port,to);
output(led_direction,from);
output(led_direction,to);
for (i = 0; i < delay; ++i)
led_delay();
input(led_direction,from);
input(led_direction,to);
}
void led_cycle(uint8_t number, uint8_t delay) {
//
// cycle through LEDs
//
uint8_t i;
for (i = 0; i < number; ++i) {
flash(B,A,delay);
flash(C,A,delay);
flash(D,A,delay);
flash(E,A,delay);
flash(A,B,delay);
flash(C,B,delay);
flash(D,B,delay);
flash(E,B,delay);
flash(A,C,delay);
flash(B,C,delay);
flash(D,C,delay);
flash(E,C,delay);
flash(A,D,delay);
flash(B,D,delay);
flash(C,D,delay);
flash(E,D,delay);
flash(A,E,delay);
flash(B,E,delay);
flash(C,E,delay);
flash(D,E,delay);
}
}
int main(void) {
//
// set clock divider to /1
//
CLKPR = (1 << CLKPCE);
CLKPR = (0 << CLKPS3) | (0 << CLKPS2) | (0 << CLKPS1) | (0 << CLKPS0);
//
// main loop
//
while (1) {
led_cycle(1,100);
led_cycle(3,20);
led_cycle(100,1);
}
}
#include <avr/io.h>
#include <util/delay.h>
#define output(directions,pin) (directions |= pin) // set port direction for output
#define set(port,pin) (port |= pin) // set port pin
#define clear(port,pin) (port &= (~pin)) // clear port pin
#define pin_test(pins,pin) (pins & pin) // test for port pin
#define bit_test(byte,bit) (byte & (1 << bit)) // test for bit set
#define PWM_delay() _delay_us(25) // PWM delay
#define led_port PORTB
#define led_direction DDRB
#define red (1 << PB1)
#define green (1 << PB0)
#define blue (1 << PB2)
int main(void) {
//
// main
//
unsigned char count, pwm;
//
// set clock divider to /1
//
CLKPR = (1 << CLKPCE);
CLKPR = (0 << CLKPS3) | (0 << CLKPS2) | (0 << CLKPS1) | (0 << CLKPS0);
//
// initialize LED pins
//
set(led_port, red);
output(led_direction, red);
set(led_port, green);
output(led_direction, green);
set(led_port, blue);
output(led_direction, blue);
//
// main loop
//
while (1) {
//
// off -> red
//
for (count = 0; count < 255; ++count) {
clear(led_port,red);
for (pwm = count; pwm < 255; ++pwm)
PWM_delay();
set(led_port,red);
for (pwm = 0; pwm < count; ++pwm)
PWM_delay();
}
//
// red -> green
//
for (count = 0; count < 255; ++count) {
set(led_port,red);
clear(led_port,green);
for (pwm = count; pwm < 255; ++pwm)
PWM_delay();
clear(led_port,red);
set(led_port,green);
for (pwm = 0; pwm < count; ++pwm)
PWM_delay();
}
//
// green -> blue
//
for (count = 0; count < 255; ++count) {
set(led_port,green);
clear(led_port,blue);
for (pwm = count; pwm < 255; ++pwm)
PWM_delay();
clear(led_port,green);
set(led_port,blue);
for (pwm = 0; pwm < count; ++pwm)
PWM_delay();
}
//
// blue -> on
//
for (count = 0; count < 255; ++count) {
set(led_port,blue);
clear(led_port,green);
clear(led_port,red);
for (pwm = count; pwm < 255; ++pwm)
PWM_delay();
set(led_port,blue);
set(led_port,green);
set(led_port,red);
for (pwm = 0; pwm < count; ++pwm)
PWM_delay();
}
//
// on -> off
//
for (count = 0; count < 255; ++count) {
set(led_port,blue);
set(led_port,green);
set(led_port,red);
for (pwm = count; pwm < 255; ++pwm)
PWM_delay();
clear(led_port,blue);
clear(led_port,green);
clear(led_port,red);
for (pwm = 0; pwm < count; ++pwm)
PWM_delay();
}
}
}
void setup() {
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
//pinMode(BUTTONPIN, INPUT);
}
/*
Each time we loop through the program we should check the state of our pushbutton, then
fade the lights.
*/
void loop() {
analogWrite(A1, 255);
delay(2000);
analogWrite(A1, 0);
delay(2000);
analogWrite(A2, 255);
delay(2000);
analogWrite(A2, 0);
delay(2000);
analogWrite(A3, 255);
delay(2000);
analogWrite(A3, 0);
delay(2000);
}