DDRC на Arduino (программирование по регистрам)
- Войдите на сайт для отправки комментариев
Втр, 24/10/2017 - 15:57
Здравствуйте! У меня есть задание по учебе: писать программы на Arduino (UNO), используя регистры, т.е.не использовать сторонние функции. Зажигать светодиод на 13 пине я уже научилась:
long int x=0; void setup() { // put your setup code here, to run once: DDRB = B100000;//заведем 13 вывод как выход в регистровом виде Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: for(x = 0; x<50000; x++) { PORTB = B100000; } for(x = 0; x<50000; x++) { PORTB = B000000; } }
Теперь у меня стоит другая задача: снять показания с потенциометра. Обычный код я смогла обдумать:
#define POT_PIN A0 #define LED_1 2 #define LED_2 3 #define LED_3 4 #define LED_4 5 void setup() { // put your setup code here, to run once: pinMode (LED_1, OUTPUT); pinMode (LED_2, OUTPUT); pinMode (LED_3, OUTPUT); pinMode (LED_4, OUTPUT); pinMode (POT_PIN, INPUT); Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: if (analogRead(POT_PIN)>(1024/5)) digitalWrite(LED_1, 1); else digitalWrite(LED_1, 0); if (analogRead(POT_PIN)>(1024/4)) digitalWrite(LED_2, 1); else digitalWrite(LED_2, 0); if (analogRead(POT_PIN)>(1024/3)) digitalWrite(LED_3, 1); else digitalWrite(LED_3, 0); if (analogRead(POT_PIN)>(1024/2)) digitalWrite(LED_4, 1); else digitalWrite(LED_4, 0); Serial.println(analogRead(POT_PIN)); }
т.е. если одно сопротивление - горит один диод, больше сопротивление - два диода, и так далее. Но порегистрово получить информацию с реостата не могу. Я не понимаю, как задать условие и почему у нас 8 бит, хотя выходов 6. Помогите, пожалуйста. Пока упрощенно программа выглядит так:
void setup() { // put your setup code here, to run once: DDRC = B11111000; } void loop() { // put your main code here, to run repeatedly: if ((PINC = B00000100)>256) digitalWrite(13, 1); else digitalWrite(13, 0); }
Считанный с аналогового входа (например А0) сигнал сравниваете с 1023 (максимально возможное значение, если А0 = 5 Вольт). Т.е. вычисляете, сколько это процентов от числа 1023. Включаете нужное Вам количество светодиодов.
Например: весь диапазон входных значений - 0... 1023; число светодиодов на весь этот диапазон - 8. Если считанное значение лежит в диапазоне 1...63, то засвечиваем один светодиод. Если считали 64...127, засвечиваем два светодиода и т.д. Получаем управляемый потенциометром засвечивающийся светодиодный столбик. Надеюсь сама идея понятна?
Настройте АЦП, сконфигурируйте и читайте. Информация даже с примерами есть в даташите.
wiring_analog.c
Можно посмотреть как что делается если лень даташит читать
Простите, не понимаю, о чем вы вообще. Как должна состоять программа в регистровом виде, чтобы при сопротивлении более 256 с реостата, загорался 13-ый диод?
Что б совсем всё не подсказывать оставил analogRead. А зажигание светиков -пример без быдлокодинга:
У меня вопрос и состоял в том, как заменить analogRead в регистровый вариант?
У меня вопрос и состоял в том, как заменить analogRead в регистровый вариант?
Тоесть ответ #3 вы не изволили рассмотреть?
Если честно, легче не стало. Что это?
Скажите девушка , как недопрограммист недопрограммисту, а вы даташит читали. Так вот вам задали на дом прочитать и разобраться в нем. А это просто проверка узнать , читали вы даташит или так в контакте провисели.
Если честно, легче не стало. Что это?
Это программа на чесном С.
http://mkprog.ru/avr/avr-dlya-nachinayushhih-urok-8-atsp.html
Эх, видимо этот форум для избранных, очень жать :) Да, я открывала даташит, да, читала про какие-то ADMUX, 0 - если ввод, 1 - вывод. Видимо я так и должна написать в IDE: 0. И ту программу из #3 комментария. Как-то смешно получается: на паре говорят - смотрите в даташите, что тут, а объяснять, как ту информацию применять никто не хочет.
Понятнее мне не стало :)
беги оттудова бегом нахрен.
lisishe-fox, даташиты не для чайников пишут, предпологается что человек уже знает основы программирования и устройство микроконтроллеров. Так что либо вы прогуливали занятия, либо это не ваше, и нужно было выбирать специальность попроще..
Прикольно, вот и договорились: в вузе мне дают микроконтроллер и говорят: изучай и программируй, на просторах инета говорят то, что говорят. :) Ладно, проще заказать программу, второй день себе мозги забиваю тем, чего нигде не объяснено :)
Для таких же не сенсеев вроде меня в мире шибко умных Ардуинщиков:
http://forum.arduino.ua/viewtopic.php?id=1071
Так вы поизучать попробуйте) тут не так много человек, которые в вузе программирование вообще изучали, пишут под контроллеры же...
Господи, нигде не объяснена работа с АЦП?!
1. Есть гугл, ну так, для примера.
2. http://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-acp.html
3. http://www.avrki.ru/articles/content/lesson_5/
4. http://avr-start.ru/?p=590
Дальше ссылки из гугла копировать?
Хотите заказать - пишите на yaryarikyar@ya.ru ) напишу, прокомментирую, могу даже протестировать.
Ты маме своей плачся, что ничего не обьясняют. Наерна, сложно обьяснить что-то человеку, которого на лекциях нету. Или он там спит. Или в ВКакашечку пырица. Зачем тогда такую специальность выбирать?
Хреново, что врачи у нас выпускаются точно такие же.
lisishe-fox, вопрос не в тему:
1. Сколько времени дается в Вашем институте на написание данного занятия?
2. Были ли лекции по машинным кодам/регистрам/адресации и прочему?
На http://www.gaw.ru/ всё расписано с апноутами, причём многие переведены на русский.
Прикольно, вот и договорились: в вузе мне дают микроконтроллер и говорят: изучай и программируй, на просторах инета говорят то, что говорят. :) Ладно, проще заказать программу, второй день себе мозги забиваю тем, чего нигде не объяснено :)
пс:http://www.embed.com.ua/raznoe/atsp-mikrokontrollerov-avr-na-paltsah/
http://avrprog.blogspot.com/2013/03/blog-post_13.html
Это программа на чесном С.
Неправда ваша, наш безкостыльный никада....никада не использует analogPinToChannel....
Прикольно, вот и договорились: в вузе мне дают микроконтроллер и говорят: изучай и программируй, на просторах инета говорят то, что говорят. :) Ладно, проще заказать программу, второй день себе мозги забиваю тем, чего нигде не объяснено :)
Когда я учился, инета еще не было. Все читали книжки и качали порнуху модемами.... Эх были времена....