Форум по Роботика
Контролери => Ардуино (Arduino) => Темата е започната от: ka4a4e в Януари 20, 2012, 12:46:58 am
-
Започвам проект управление на усилвател с ардуино но имам едни въпроси как да използвам ШИМ сигнала за контрол силата на звука мислех си с транзистор да е като потенциометър но импулсите няма ли да се пречкат на аудио сигнала. Другия начин дето гледах е с мултиплексор ама там ще е голяма играчка.
-
Има си цифрови потенциометри за тая работа.
-
Какви са те ???? Може ли малко информация.
-
MCP42010 например. Двуканален 10к.
п.п.
Ти гугъл нямаш ли??
-
ще го правя с 4067 мултиплексор но като експериментирах с кода за rotary encoder контролера се бъгна нещо и сега не е адекватен. Като цъкна бутона ресет вместо пин13 да смига диода, смига диода на TX командите и нищо не може да се качи. какво да правя ???
-
Най-директния начин е да се изтрие процесора и да се програмира наново bootloadera. Изтриването - с подходящ програматор. Програмирането - също. Най-вероятно ще стане през ICSP.
-
Имам още един контролер с зареден боотлоадер и мога ли чрез него да кача боотлоадера на "повредения" контролер по този начин http://arduino.cc/en/Tutorial/ArduinoISP но дали ще стани.
-
Опитах да го кача с Arduino но като цъкна Burn и ми дава грешка:
avrdude: stk500_program_enable(): protocol error, expect=0x14, resp=0x50
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51
предварително съм качил ArduinoISP
-
Мисля, че нещата ще се получат по-безпроблемно ако ползуваш програматор за конкретния процесор. Какъв всъщност е процесора на платката?
-
Мисля, че нещата ще се получат по-безпроблемно ако ползуваш програматор за конкретния процесор. Какъв всъщност е процесора на платката?
Чакай че нещо аз ли не мога да обясня или да те разбера...
Имам Arduino serial и 2 контролера Atmega8-16PU и двата са с заредени bootloader-а но единия се повреди. Сложил съм работещия контролер на платката Arduino а другия на breadboard и съм го свързал по схема дадена в сайта на Arduino за ISP комуникация. Вкарал съм на работещия контролер Examples ArduinoISP и след това цъкам на Burn и ми дава грешка:
avrdude: stk500_program_enable(): protocol error, expect=0x14, resp=0x50
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51
И сега какво да правя?
-
Разбираме се, ама всеки си мисли своето и си говори за него. В линка http://arduino.cc/en/Tutorial/ArduinoISP почти най-горе пише че ARDUINO UNO не може да се ползува защото bootloadera е неподходящ - поне аз така го разбирам. Не се задълбочавах особено но мисля, че това вероятно е в основата на проблема - може и да греша разбира се - по препратките по нататък пише за забрана на bootloader и т.н. - не ми достигна търпение да вниквам в подробностите.
Предлагам ти начин който при мене свърши работа. Направи си PONYPROG - http://www.lancos.com/siprogsch.html - Base board и AVR adapter. Прочети си процесора с изправен bootloader. Изтрий процесора с повреден bootloader. Запиши върху изтрития процесор файла, прочетен от процесора с изправен bootloader, като спазиш FUSES и всичко ще се оправи. Ако си запазиш файла, прочетен с PONY като *e2p файл, FUSES ще се заредят с файла.
Като изтриеш процесора може да програмираш bootloadera и посредством Arduino IDE - http://robocraft.ru/blog/arduino/50.html - както си прецениш.
Разбира се можеш да си направиш и друг програматор, който смяташ че е по лесен за направа и по-подходящ за Atmega8 - важното е да изтриеш процесора - с какъв програматор ще го направиш не е съществено - в ТУ Габрово все ще се намери подходящ. Успех!
Е може да купиш и нов Atmega8 и да програмираш bootloader посредством Arduino IDE - може и да стане най-бързо.
-
Да живее ponyprog :clap: .
Първо се опитах да изтрия повредения контролер но после arduino не иска да му вкара bootloader-а. Но като копирах работещия контролер и сложих на повредения всичко се оправи. Благодаря ти много.
-
Има ли някой в форума който може да помогне за управление на ротационен енкодер. Намерих една много добра програма но не ми върши работа като я сложа на аналоговите пинове (тъй като вече съм си проектирал и направил платката) пиновете ще са на А4 и А5.
Ето и самата програма./*
Rotary encoder decoding using two interrupt lines.
Most Arduino boards have two external interrupts,
numbers 0 (on digital pin 2) and 1 (on digital pin 3).
Program sketch is for SparkFun Rotary Encoder sku: COM-09117
Connect the middle pin of the three to ground.
The outside two pins of the three are connected to
digital pins 2 and 3
*/
volatile int number = 0; // Testnumber, print it when it changes value,
// used in loop and both interrupt routines
int oldnumber = number;
volatile boolean halfleft = false; // Used in both interrupt routines
volatile boolean halfright = false;
void setup(){
Serial.begin(9600);
pinMode(2, INPUT);
digitalWrite(2, HIGH); // Turn on internal pullup resistor
pinMode(3, INPUT);
digitalWrite(3, HIGH); // Turn on internal pullup resistor
attachInterrupt(0, isr_2, FALLING); // Call isr_2 when digital pin 2 goes LOW
attachInterrupt(1, isr_3, FALLING); // Call isr_3 when digital pin 3 goes LOW
}
void loop(){
if(number != oldnumber){ // Change in value ?
Serial.println(number); // Yes, print it (or whatever)
oldnumber = number;
}
}
void isr_2(){ // Pin2 went LOW
delay(1); // Debounce time
if(digitalRead(2) == LOW){ // Pin2 still LOW ?
if(digitalRead(3) == HIGH && halfright == false){ // -->
halfright = true; // One half click clockwise
}
if(digitalRead(3) == LOW && halfleft == true){ // <--
halfleft = false; // One whole click counter-
number--; // clockwise
}
}
}
void isr_3(){ // Pin3 went LOW
delay(1); // Debounce time
if(digitalRead(3) == LOW){ // Pin3 still LOW ?
if(digitalRead(2) == HIGH && halfleft == false){ // <--
halfleft = true; // One half click counter-
} // clockwise
if(digitalRead(2) == LOW && halfright == true){ // -->
halfright = false; // One whole click clockwise
number++;
}
}
}