01.03.2016 | Arduino, Глянь-ка!, Обзоры, Покупка, Своими руками, Электро | 3
| Автор: Кирилл
Не так давно, сделал обзор хорошего USB паяльника USB паяльник zd 20u 5v 8w: http://j.mp/1QF3DmS
Паяльник оправдал все мои ожидания, но по советам нашего подписчика сегодня я предлагаю произвести модернизация usb паяльника, и заменить сердце ZD 20U 5V 8W выполненное на NE555 (микросхема интегрального таймера) на микроконтроллер ATtiny13A (Atmel Corporation).
Нам понадобится:
Так как прошивка для ATtiny13A написано в среде Arduino, нам необходимо подготовить наш микроконтроллер. Для этого мы должны подключить по следующей схеме:
Можно использовать как макетную плату, так и разъем Sop8 в DIP8, что во втором случае еще удобнее. Как видим схема очень простая.
https://www.youtube.com/watch?v=LqYfzpeGY14
Может кому то пригодится в оригинальном Datasheet используется конденсатор между разъемами reset и GND.
Так как, мы работает от встроенного генератора 9,6MHz, пропускаем и файл файл avrdude.conf не правим. Поэтому фал этот не правим. Далее нам необходимо сделать из Arduino программатор для нашей ATtiny13A. Этот скетч есть в примерах, называется Arduino ISP. Теперь мы закрываем IDE и начинаем править конфиги Arduino IDE чтобы обучить IDE работе с нашим контроллером. Ищем в папке с Arduino IDE файл avrdude.conf. В нем ищем настройки для контроллера ATTiny13. Нам надо исправить его параметры на наш контроллер:
1 2 3 |
part id = «t13a»; desc = «ATtiny13a»; |
Далее ищем нашу папку со скетчами, и распаковываем в нее следующий архив. После этого запускаем заново нашу Arduino IDE и в меню Сервис выбираем нашу плату ATTiny13A, изменяем программатор на Arduino ISP.
Теперь прошьём Arduino в ArduinoISP, что бы через нее прошить ATTiny13A, для этого из примеров Arduino IDE:
Создадим новый скетч:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
#define F_CPU 9600000UL #include<avr/io.h> #include<util/delay.h> #include<avr/wdt.h> #include<avr/sleep.h> #include<avr/interrupt.h> //Состояния девайса enum DEV_MODE{M_WAITING_SENSOR, //Ждем отклика от сенсора и спим M_SENSOR_RECHECK, //После первого отклика перепроверяем M_GLOW, //Разгораемся M_GLOW_AND_CHECK, //Светим и проверяем сенсор M_GLOW_AND_RECKECK //Перепроверяем, если отпустили }; //Гаснем unsigned char SensorHi=0; //Переменная, которая будет хранить значение для активного сенсора unsigned short Delay=0; //Внутренняя переменная для организации долгих задержек unsigned char Mode=0; //Режим работы unsigned char hot=0; //количество подогревов void SetTimer(void) //Функция для быстрой переинициализации таймера с режима сенсора на ШИМ { TCCR0A=0x00; TCCR0B=0x00; TCNT0=0x00; } void Recalibrate() //Калибровка сенсора { cli(); SetTimer(); DDRB&= 0b11110111; PORTB|=0b00000001; TCCR0B=0x01; while(!(PINB&0b00001000)); TCCR0B=0x00; DDRB|= 0b00001000; PORTB&= 0b11111110; SensorHi=TCNT0+3; //При такой частоте +3 оказалось вполне достаточно, даже слегка много sei(); //Включаем интеррапты обратно } unsigned char CheckSensor() { cli(); SetTimer(); DDRB&= 0b11110111; PORTB|=0b00000001; TCCR0B=0x01; while(!(PINB&0b00001000)); TCCR0B=0x00; DDRB|= 0b00001000; PORTB&= 0b11111110; unsigned char Time=TCNT0; sei(); if(Time>SensorHi) return 0xFF; return 0x00; } int main() { ACSR = 0b1000000; //Настройка режима энергосбережения DDRB = 0b00011001; SetTimer(); //Переключили таймер в режим проверки сенсора Mode= M_WAITING_SENSOR; sei(); Recalibrate(); //Калибруемся _delay_ms(20); while(1) { switch(Mode) { case M_WAITING_SENSOR: if(CheckSensor())Mode= M_SENSOR_RECHECK; break; case M_SENSOR_RECHECK: Delay++; if(Delay>0x0010) { if(!CheckSensor()) { Mode= M_WAITING_SENSOR; Delay=0x0000; } else { Delay=0x0000; PORTB =0b00010000; Mode= M_GLOW; } } break; case M_GLOW: Delay++; if(Delay>0x0500) //Полностью разгорелись { Mode=M_GLOW_AND_CHECK; Delay=0x0000; } break; case M_GLOW_AND_CHECK: if(!CheckSensor()) { Mode=M_GLOW_AND_RECKECK; PORTB =0b00000000; } break; case M_GLOW_AND_RECKECK: Delay++; if(Delay>0x0010) { //а посветить еще секунд 20 if(CheckSensor()) { Mode=M_GLOW_AND_CHECK; PORTB =0b00010000; Delay=0x0000; } else { if (Delay>0x00C0) PORTB =0b00010000; //Включаем нагрев на 1 сек if (Delay>0x0100) { PORTB =0b00000000; Delay=0x0000; hot++;} if (hot>10) { PORTB =0b00000000; Delay=0x0000; hot=0;Mode= M_WAITING_SENSOR;} } } break; } _delay_ms(20); } } |
Теперь мы можем выбрать, на какой частоте может работать микроконтроллер ATtiny13а.
С завода ATtiny13а работает на частоте в 1.2 МГц, а нам надо 9.6 МГц:
https://www.youtube.com/watch?v=yrf_eHexjz0
Теперь наш микроконтроллер работает на частоте внутреннего генератора 9.6 МГц. Проверяем настройки для прошивки нашей ATTiny13A:
Зальем этот скетч в наш контроллер и соберем следующую схемку:
Как теперь работает USB паяльник ZD 20U 5V 8W:
Создано на основе данных с сайта
Последние комменты