avr-examples
Розбіжності
Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
| Наступна ревізія | Попередня ревізія | ||
| avr-examples [2015/06/28 15:49] – створено + "8 светодиодов" wombat | avr-examples [2015/07/09 16:29] (поточний) – I2C example wombat | ||
|---|---|---|---|
| Рядок 42: | Рядок 42: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | |||
| + | ===== АЦП и 8 светодиодов ===== | ||
| + | |||
| + | Эта программа периодически считывает напряжение с АЦП (первая ножка порта " | ||
| + | |||
| + | <file c adc-leds.c> | ||
| + | #define F_CPU 11059200UL | ||
| + | |||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | |||
| + | volatile uint16_t adcval; | ||
| + | |||
| + | |||
| + | |||
| + | ISR(ADC_vect) | ||
| + | { | ||
| + | adcval = ADCW; | ||
| + | } | ||
| + | |||
| + | int main() | ||
| + | { | ||
| + | |||
| + | uint16_t digits = 0; | ||
| + | int i; | ||
| + | |||
| + | // Включаем АЦП и устанавливаем частоту дискретизации = F_CPU / 128 | ||
| + | ADCSRA = _BV(ADEN) | _BV(ADPS1) | _BV(ADPS0) | _BV(ADPS2); | ||
| + | | ||
| + | |||
| + | sei(); | ||
| + | |||
| + | DDRA = 0b00000000; | ||
| + | DDRC = 0b11111111; | ||
| + | |||
| + | PORTC = 0b00000000; | ||
| + | |||
| + | | ||
| + | ADCSRA |= _BV(ADIE); | ||
| + | // Выбираем первую ножку (№0) для считывания напряжения АЦП | ||
| + | ADMUX &= ~_BV(MUX0) & ~_BV(MUX1) & ~_BV(MUX2) & ~_BV(MUX3) & ~_BV(MUX4); | ||
| + | | ||
| + | // Выбор внутреннего напряжения 1.22В для считывания АЦП | ||
| + | // | ||
| + | // | ||
| + | | ||
| + | ADMUX |= _BV(REFS0) | _BV(REFS1); // Внутреннее опорное напряжение 2.56В | ||
| + | ADCSRA |= _BV(ADATE); | ||
| + | // Выбираем "Free running mode" | ||
| + | SFIOR &= ~_BV(ADTS0) & ~_BV(ADTS1) & ~_BV(ADTS2); | ||
| + | | ||
| + | ADCSRA |= _BV(ADSC); | ||
| + | | ||
| + | |||
| + | while (1) // Бесконечный цикл | ||
| + | { | ||
| + | |||
| + | | ||
| + | //ADCSRA |= _BV(ADSC); | ||
| + | |||
| + | // Вычисляем количество светодиодов, | ||
| + | // зажечь при данном напряжении | ||
| + | digits = 0b00000000; | ||
| + | for (i=0; i< (adcval+1) / 128; i++) | ||
| + | { | ||
| + | digits = (digits << 1) +1; | ||
| + | } | ||
| + | | ||
| + | /* | ||
| + | if (adcval >= 1023) digits = 0b11111111; | ||
| + | else if (adcval >= 895) digits = 0b01111111; | ||
| + | else if (adcval >= 767) digits = 0b00111111; | ||
| + | else if (adcval >= 639) digits = 0b00011111; | ||
| + | else if (adcval >= 511) digits = 0b00001111; | ||
| + | else if (adcval >= 383) digits = 0b00000111; | ||
| + | else if (adcval >= 255) digits = 0b00000011; | ||
| + | else if (adcval >= 127) digits = 0b00000001; | ||
| + | else digits = 0b00000000; | ||
| + | */ | ||
| + | | ||
| + | PORTC = digits; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== I2C / TWI ===== | ||
| + | |||
| + | http:// | ||
| + | |||
| + | |||
| + | |||
avr-examples.1435506562.txt.bz2 · Востаннє змінено: повз wombat
