Полный код, скорее всего будет малополезен. Есть 4 режима, сейчас интересует 2, когда A0 посажен на землю. Программа недописана.
01 | #define data1in (2) // outs |
15 | unsigned long last_upd=millis(), |
20 | pinMode(mode1sel,INPUT_PULLUP); |
21 | pinMode(mode2sel,INPUT_PULLUP); |
22 | pinMode(data1in,INPUT); |
23 | pinMode(data2in,INPUT); |
24 | pinMode(led1out,OUTPUT); |
25 | pinMode(led2out,OUTPUT); |
26 | pinMode(led3out,OUTPUT); |
27 | pinMode(led4out,OUTPUT); |
28 | pinMode(led5out,OUTPUT); |
29 | pinMode(led6out,OUTPUT); |
36 | if (digitalRead(data1in)==HIGH && !trig){ |
40 | if (digitalRead(data1in)==LOW && trig && millis()-last_trig>=trig_span){ |
43 | mode=!digitalRead(mode1sel)*2+!digitalRead(mode2sel); |
48 | if (millis()-last_upd>=trig_span){ |
49 | if (val>0 && val<255) val=0; |
52 | analogWrite(led1out,val); |
53 | analogWrite(led2out,val); |
54 | analogWrite(led3out,val); |
55 | analogWrite(led4out,val); |
56 | analogWrite(led5out,val); |
57 | analogWrite(led6out,val); |
62 | if (millis()-last_upd>=30){ |
64 | analogWrite(led1out,val); |
65 | analogWrite(led2out,val); |
66 | analogWrite(led3out,val); |
67 | analogWrite(led4out,val); |
68 | analogWrite(led5out,val); |
69 | analogWrite(led6out,val); |
74 | analogWrite(led1out,255); |
75 | analogWrite(led2out,255); |
76 | analogWrite(led3out,255); |
77 | analogWrite(led4out,255); |
78 | analogWrite(led5out,255); |
79 | analogWrite(led6out,255); |
82 | if (millis()-last_upd>=trig_span){ |
88 | analogWrite(led1out,0); |
89 | analogWrite(led2out,0); |
90 | analogWrite(led3out,0); |
91 | analogWrite(led4out,0); |
92 | analogWrite(led5out,0); |
93 | analogWrite(led6out,0); |
Суть проблемы: на плате Duemilanove пр-ва Италии с 328 этот же код выполняется и шимятся все 6 выводов. На самодельной плате, сляпанной из 8й меги из Китая, в TQFP корпусе творится следующая херня: на выводах 11, 10, 9 нормально. На выводах 3, 5, 6 - больше 127 - горит, меньше не горит. Куда копать? программа наитупейшая, никаких нехваток памяти не может быть в принципе. Все таймеры работают. иначе как я понимаю - нет на 3 - не было бы и на 11. Чо за хрень? Что ещё можно убить в меге? Разъём программатора вверх тормашками НЕ втыкался.
Заодно прицепом вопрос, можно ли читать D0 когда запущен сериал? типа:
Фотки будут, если надо.
Фотки платы:
даташит почитай. там всего 3 хардваных шима)) на 9 10 и 11
О как. ну блин, голова помидор. А я думал они только объёмом флеша, EEPROM и мозгов отличаются.
А как с сериалом, если он запущен, можно читать вывод Rx по digitalRead()?
да нет. разница больше))
а с вопросом не понял
по теме - сделайте програмный ШИМ
у атмела было несколько поколений МК, мега8 из самых первых, старее чем тини13, а мега328 практически из последнего поколения, новее только тини4/5/9/10
так что отличий и правда куда больше, чем просто память. количество ШИМ одно из них, еще более критичные - отсутствие системы PCINT, меньше режимов у таймеров, отсутствие железной отладки и т.д.
Даже больше. atmega8 заметно отличается от atmega8a. Последняя говоря языком програмистов багфикс к atmega8, говоря языком автомобилистов - рестайлинг
Ровесник atmega328 - atmega88. У них и даташит один. Но по цене смысла покупать 88-ю нет никакого. Либо мириться с отличиями мега8 и покупать ее по 60 центов либо практически за теже деньги что 88-я покупать 328-ю (вместо 1.1 платить 1.3)
Не, у меня atmega8a-au, на фотге видно.