The .brd and the .sch of my Hugodino that
I redesign from the original SAMDINO (link above) I remove the
components that I will not use formy final project and I kept the
ones that I need like: ATSAMD11, the LED, and resistors , Regulator
and headers.
First we program the
board with a programmer with a EDBG file that we also download
following the instructions that you can find in the
Adrian
Torres / SAMDINO.
The verification was
succesfull
To test the Hugodino
heré the code I use to test it; make the LED blink and the servo to
rotate into different positions and reading both one after another
so the LED turn off then the servo moves, then the LED turns on and
the servo rotate, and so, goes on and on
LED in pin 2
Servo in pin 8
In the Data sheet we
can find wich pin is Digital, Analog, where is GND and VCC, this
information is very usefull to connect the sensors, leds and other
components for future projects, for example ; PINS
02,04,05,08,09,4,15 and 31 are the digital ones and PINS 02,04,05,14
and 15 can be configured as analogs.
To test the hugodino
I´m going to use a servo and blink the hugodino led.
In the code, the LED
blink and the servo to rotate into different positions alternating
one after another so the LED turn off then the servo moves, then the
LED turns on and the servo rotate, and so, the reading goes on and
on
Here is the code and a
video
int led = 2;
int servo = 8;
int angle;
int pwm;
void setup()
{
pinMode(servo, OUTPUT);
pinMode(led, OUTPUT);
}
void loop ()
{
digitalWrite(led,HIGH);
delay(1000);
servoPulse(servo, 15);
delay(1000);
digitalWrite(led,LOW);
delay(1000);
servoPulse(servo, 90);
delay(1000);
digitalWrite(led,HIGH);
delay(1000);
servoPulse(servo, 120);
delay(1000);
digitalWrite(led,LOW);
delay(1000);
servoPulse(servo, 180);
delay(1000);
}
void servoPulse (int servo, int angle)
{
pwm = (angle*11) + 500; // Convert
angle to microseconds
digitalWrite(servo, HIGH);
delayMicroseconds(pwm);
digitalWrite(servo, LOW);
delay(50);
// Refresh cycle of servo
}
For this assignment I
design a new PCB with a LED and a button in eagle, then following the
steps that Adrian Torres mentioned in his web page link
to SAMDINO. I use the bootloader and execute
the EDBG
edbg-windows-r38.exe
-ebpv -t samd11 -f sam_ba_SAMD11C14A.bin
and the verification was OK and the LED of
my PCB turn ON.
Then the code, I wanted
to blink the led with the button in two steps, when I push the button
for the first time I want the LED to blink with a delay of 1sec.
then, when I push the button for the second time I want theLED to
blink with a different delay, I decide that the delay now was of half
a second, with this two delays the difference of the blink speed will
become evident.
DATA SHEET:
Reviewing the data sheet
we can find some important information about the SAMD11C:
-it has 14 PIN
-16KB flash
memory
-4KB SRAM
-Voltage Minimum 1.62V
Maximum 3.63V
-Digital pins :
PA02, PA04, PA05, PA08, PA09, PA14, PA15, PA31
(shown in green in the
image above, this are the ones where you are going to connect
the components of your board, example: if your are going to connect
your LED to the pin 2 or 4 that means thar you are going to connect
them in PA04 or in PA02 (PIN 14 or 13 shown inside the
microcontroller) and VDD and GND are connected to PINS 12 and 11.)
-Digital pins :
PA02, PA04, PA05, PA08, PA09, PA14 and PA15
(shown
in brown color in the image above)
When designing the board
with the LED and the button I connect the LED to PIN02 and the button
to PIN04. Here the Schematic and Board images of my design
This is the list of the
components to weld in my PCB, Resistors, LED, Button, microcontroller,
PIN 2x2, regulator and capacitor.
Following the steps that
Adrián Torres mentioned in his webpage to download the bootloader and
for execute the EDBG.
The verification was
succesfull.
Then the code using a
button to blink the led.
there is a combination of
"States" between the button and the led, when the button is pressed
the state is HIGH, and when the LED is ON his state is ON, so with
this in mind the code will tell the LED wehn to turn ON and start to
Blink, and then adding the "int aux" we can push the button once and
the LED will blink with a delay of 1sec. and if we push the button for
the second time the LED will blink with a delay of half a second.
Here is the code:
/*
created 2005
by DojoDave <http://www.0j0.org>
modified 30 Aug 2011
by Tom Igoe
*/
// constants won't change. They're used here to set pin numbers:
const int buttonPin = 4; // the number of the
pushbutton pin
const int ledPin = 2; // the
number of the LED pin
int aux=0;
// variables will change:
int buttonState = 0;
// variable for reading the pushbutton status
//aqui voy a indicar que es salida o entrada por ejemplo: Servo, LDR,
LED INPUT o OUTPUT
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
//este es el ciclo, lo que se va a estar ejecutando, de arriba a abajo
y vuelve a empezar
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed. If it is, the
buttonState is HIGH:
if (aux==0 & buttonState == HIGH){
// turn LED on:
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
aux++;
buttonState=0;
}
if (aux == 1 & buttonState == HIGH){
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
aux=0;
}
else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
}
In this video we can see
the LED blink ON and OFF in different speed dependind if we push the
button for the first time or twice.