avr:stk500
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
avr:stk500 [2013/09/10 13:20] – sdolt | avr:stk500 [2013/09/18 14:50] (current) – sdolt | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | < | + | Déplacer vers [[avr:exemple|Exemple de code pour AVR]] |
- | Pour la théorie et le premier | + | |
- | + | ||
- | ====== STK500 ====== | + | |
- | + | ||
- | ===== Attiny 85 ===== | + | |
- | + | ||
- | Exemple de code pour ATtiny 85 sur le programmeur / platine d' | + | |
- | ==== 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.txt · Last modified: 2013/09/18 14:50 by sdolt