avr:stk500
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| avr:stk500 [2013/08/27 13:48] – created sdolt | avr:stk500 [2013/09/18 14:50] (current) – sdolt | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | < | + | Déplacer vers [[avr:exemple|Exemple |
| - | Pour la théorie et le premier | + | |
| - | + | ||
| - | ====== STK500 ====== | + | |
| - | + | ||
| - | ===== Attiny 85 ===== | + | |
| - | + | ||
| - | ==== Allumer et éteindre les LEDs ==== | + | |
| - | + | ||
| - | < | + | |
| - | # | + | |
| - | # | + | |
| - | #define F_CPU 1000000UL // | + | |
| - | # | + | |
| - | + | ||
| - | int main() | + | |
| - | { | + | |
| - | DDRB = 0b111111; | + | |
| - | + | ||
| - | while(1) | + | |
| - | { | + | |
| - | //Séquence 1 | + | |
| - | + | ||
| - | PORTB = 0b010111; | + | |
| - | _delay_ms(150); | + | |
| - | PORTB = 0b010110; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b010100; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b010000; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b000000; | + | |
| - | _delay_ms(150); | + | |
| - | PORTB = 0b010000; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b010100; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b010110; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b010111; | + | |
| - | _delay_ms(150); | + | |
| - | + | ||
| - | // | + | |
| - | + | ||
| - | PORTB = 0b000111; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b000011; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b000001; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b000000; | + | |
| - | _delay_ms(150); | + | |
| - | PORTB = 0b000001; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b000011; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b000111; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b010111; | + | |
| - | _delay_ms(150); | + | |
| - | + | ||
| - | // | + | |
| - | + | ||
| - | PORTB = 0b010110; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b010101; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b010011; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b000111; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b010111; | + | |
| - | _delay_ms(150); | + | |
| - | PORTB = 0b000111; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b010011; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b010101; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b010110; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b010111; | + | |
| - | _delay_ms(150); | + | |
| - | + | ||
| - | // | + | |
| - | + | ||
| - | PORTB = 0b000000; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b000001; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b000010; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b000100; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b010000; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b000000; | + | |
| - | _delay_ms(150); | + | |
| - | PORTB = 0b010000; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b000100; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b000010; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b000001; | + | |
| - | _delay_ms(50); | + | |
| - | PORTB = 0b000000; | + | |
| - | _delay_ms(150); | + | |
| - | } | + | |
| - | return 0; | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Allumer une LED en appuyant sur un bouton switch ==== | + | |
| - | + | ||
| - | < | + | |
| - | # | + | |
| - | # | + | |
| - | + | ||
| - | int main() | + | |
| - | { | + | |
| - | DDRB = 0xFF; | + | |
| - | + | ||
| - | DDRB |= (1<< | + | |
| - | PORTB &= ~(1<< | + | |
| - | + | ||
| - | DDRB |= (1<< | + | |
| - | DDRB &= ~(1 << PB2); // mise en entrée de PB2 [~(1<< | + | |
| - | + | ||
| - | while (1) | + | |
| - | { | + | |
| - | if (PINB & (1<< | + | |
| - | PORTB |= (1<< | + | |
| - | else | + | |
| - | PORTB &= ~(1<< | + | |
| - | } | + | |
| - | return 0; | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Créer une interruption en cliquant sur un bouton switch ==== | + | |
| - | + | ||
| - | === Séquence 1: extinction différée des LEDs 0 et 1 lors de la pression sur le bouton === | + | |
| - | + | ||
| - | + | ||
| - | < | + | |
| - | #include < | + | |
| - | #include < | + | |
| - | #define F_CPU 1000000UL // | + | |
| - | #include < | + | |
| - | + | ||
| - | ISR(INT0_vect) // | + | |
| - | { | + | |
| - | //pression sur le bouton switch | + | |
| - | PORTB |= (1<< | + | |
| - | _delay_ms(150); | + | |
| - | PORTB |= (1<< | + | |
| - | _delay_ms(150); | + | |
| - | } | + | |
| - | + | ||
| - | int main(void) | + | |
| - | { | + | |
| - | DDRB = 0xFF; | + | |
| - | + | ||
| - | DDRB |= (1<< | + | |
| - | DDRB |= (1<< | + | |
| - | + | ||
| - | DDRB &= ~(1 << PB2); //mise en entrée de PB2 | + | |
| - | + | ||
| - | cli(); | + | |
| - | + | ||
| - | // Activer l' | + | |
| - | GIMSK |= (1<< | + | |
| - | + | ||
| - | MCUCR |= (1<< | + | |
| - | MCUCR |= (1<< | + | |
| - | + | ||
| - | sei(); | + | |
| - | + | ||
| - | while(1) | + | |
| - | { | + | |
| - | PORTB &= ~(1<< | + | |
| - | PORTB &= ~(1<< | + | |
| - | } | + | |
| - | + | ||
| - | + | ||
| - | return 0; | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | === Séquence 2: extinction des LEDs 0 et 1 uniquement lors de la pression sur le bouton === | + | |
| - | + | ||
| - | < | + | |
| - | #include < | + | |
| - | #include < | + | |
| - | + | ||
| - | ISR(INT0_vect) // | + | |
| - | { | + | |
| - | if (bit_is_set(PINB, | + | |
| - | { | + | |
| - | PORTB &= ~(1<< | + | |
| - | PORTB &= ~(1<< | + | |
| - | } | + | |
| - | else //si pression sur le bouton switch: extinction des LEDs | + | |
| - | { | + | |
| - | PORTB |= (1<< | + | |
| - | PORTB |= (1<< | + | |
| - | } | + | |
| - | } | + | |
| - | + | ||
| - | int main(void) | + | |
| - | { | + | |
| - | DDRB = 0xFF; | + | |
| - | + | ||
| - | DDRB |= (1<< | + | |
| - | DDRB |= (1<< | + | |
| - | + | ||
| - | DDRB &= ~(1 << PB2); //mise en entrée de PB2 | + | |
| - | + | ||
| - | cli(); | + | |
| - | + | ||
| - | // Activer l' | + | |
| - | GIMSK |= (1<< | + | |
| - | + | ||
| - | MCUCR |= (1<< | + | |
| - | + | ||
| - | sei(); | + | |
| - | + | ||
| - | while(1); | + | |
| - | + | ||
| - | return 0; | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Créer une interruption grâce à une minuterie ==== | + | |
| - | + | ||
| - | < | + | |
| - | #include < | + | |
| - | #include < | + | |
| - | + | ||
| - | #define DDRB_IN(a) DDRB &= ~(1<< | + | |
| - | #define DDRB_OUT(a) DDRB |= (1<< | + | |
| - | + | ||
| - | #define LED_ON(a) PORTB &= ~(1<< | + | |
| - | #define LED_OFF(a) PORTB |= (1<< | + | |
| - | + | ||
| - | ISR(TIMER1_COMPA_vect) // | + | |
| - | { | + | |
| - | PORTB ^= (1<< | + | |
| - | } | + | |
| - | + | ||
| - | int main() | + | |
| - | { | + | |
| - | DDRB = 0xFF; | + | |
| - | + | ||
| - | DDRB_OUT(PB0); | + | |
| - | DDRB_OUT(PB1); | + | |
| - | + | ||
| - | LED_ON(PB0); | + | |
| - | + | ||
| - | TCCR1 |= (1<< | + | |
| - | TIMSK |= (1<< | + | |
| - | + | ||
| - | sei(); | + | |
| - | + | ||
| - | OCR1A = 244; | + | |
| - | TCCR1 |= (1<< | + | |
| - | + | ||
| - | while(1){ | + | |
| - | LED_OFF(PB1); | + | |
| - | } | + | |
| - | + | ||
| - | return 0; | + | |
| - | } | + | |
| - | + | ||
| - | </ | + | |
| - | ==== Configuration et lecture du convertisseur AD ==== | + | |
| - | + | ||
| - | < | + | |
| - | # | + | |
| - | # | + | |
| - | #define F_CPU 8000000UL | + | |
| - | # | + | |
| - | + | ||
| - | + | ||
| - | void initAdc (void); | + | |
| - | + | ||
| - | void main (void) | + | |
| - | { | + | |
| - | int valHigh; | + | |
| - | int valLow; | + | |
| - | + | ||
| - | initAdc(); | + | |
| - | + | ||
| - | + | ||
| - | while (1) | + | |
| - | { | + | |
| - | ADCSRA|=(1<< | + | |
| - | + | ||
| - | while (ADCSRA & (1<< | + | |
| - | + | ||
| - | valHigh = ADCH; | + | |
| - | valLow = ADCL; | + | |
| - | + | ||
| - | } | + | |
| - | return 0; | + | |
| - | } | + | |
| - | + | ||
| - | + | ||
| - | // Cette fonction configure la conversion AD | + | |
| - | void initAdc (void) | + | |
| - | { | + | |
| - | ADMUX = 0b00000001; | + | |
| - | //REFS1 = 1 -> RFS = 010 référence de voltage interne(1.1V) | + | |
| - | // | + | |
| - | //REFS0 = 0 | + | |
| - | // | + | |
| - | // | + | |
| - | // | + | |
| - | + | ||
| - | ADCSRA = 0b10000110; | + | |
| - | //ADEN = 1 -> active l' | + | |
| - | //ADSC = 0 -> n' | + | |
| - | // | + | |
| - | //ADIF = 0 | + | |
| - | //ADIE = 0 | + | |
| - | // | + | |
| - | // | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | La configuration du convertisseur AD a été réalisé à l'aide du datasheet de l' | + | |
| - | Pour s' | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | == Liste des branchements == | + | |
| - | + | ||
| - | * **STK => JTAGICE** | + | |
| - | * MISO => TDO | + | |
| - | * VTG => Vsupply | + | |
| - | * SCK => TCK | + | |
| - | * MOSI => TDI | + | |
| - | * RST => nSRST | + | |
| - | * GND => GND | + | |
| - | \\ | + | |
| - | {{: | + | |
| - | + | ||
| - | + | ||
| - | == Visualisation des registres == | + | |
| - | Pour pouvoir voir nos registres il faut lancer notre code en mode debug avec Menu=> | + | |
| - | \\ | + | |
| - | {{: | + | |
| - | + | ||
| - | + | ||
| - | + | ||
avr/stk500.1377611280.txt.gz · Last modified: 2013/08/27 13:48 by sdolt