Atmega88 одни светодиоды мигают, другие светят, третьи не горят

Заставим микроконтроллер Atmega88 мигать одними светодиодами, другими просто светить, а другими просто не гореть. Напишем код на С. Hex файл для программирования можно скачать ниже.

Распиновка Atmega88:

Фьюзы не трогал – стандартные (по умолчанию):

Примечание: это прога AVR8_Burn-O-Mat, так как программировал в Linux Rosa Fresh, но для PonyProg2000 фьюзы будут такими же.

Код на Си следующий:

#include <avr/io.h>

#include "delay.h"
#include "delay.c"

#define F_CPU 16000000UL // 1 MHz скорость микроконтроллера

int main(void)
{
DDRC = 0xFF; //PORTC все порты работают как выход

while(1) //бесконечный цикл
{
PORTC = 0b0011000; //зажигаем светодиоды на портах PC3 и PC4
_delay_ms(100); //задержка 
PORTC= 0b0011011; //зажигаем светодиоды на портах PC3 и PC4, а также PC0 и PC1
_delay_ms(100); //задержка
}
}

PORTC = 0b0011000
Здесь префикс 0b идентифицирует следующее за ним число как двоичное, а порядковый номер бита отвечает номеру бита внутри порта. То есть последний (крайний правый) разряд этого числа соответствует PC0, предпоследний – PC1 и т. д. Как итог: PC3 и PC4 настроен как выход, все остальные разряды (PC1…PC6) – как высокоимпедансные входы.
Поскольку порт С в Atmega8 содержит не 8 разрядов, а 7, то и количество битов в двоичном коде равно 7.

Скачать hex файл можно здесь – скачать в zip архивескачать в tar.gz архиве.

Примечание: Писал код на AVRStudio 4.
При программировании светодиоды лучше отключать на плате.
Программатор – 5 проводков, но в данном случае использовал самодельный AVRasp.

Добавить комментарий