Поиск сообщества
Показаны результаты для тегов 'uno'.
Найдено: 4 результата
-
Нужна спецификация схемы, или совет как можно ее сделать за 2 дня, у меня в этом нету опыта совсем
- 2 ответа
-
- arduino
- принципиалка
-
(и ещё 2 )
C тегом:
-
Здравствуйте. Ребята, вопрос собсно в чем. Как заменить контроллер на уно. Вернее не заменить, а прошить в другой бутлоадер. Родной стоит атмега328 имею только атмега8. Возможна ли замена? Вопрос встал ибо неполучается прошить отдельно мегу8 для простого устройства. С ардуино работает. Вот я и решил заморочиться с подменой. Т.е. загрузить бутлоадер при помощи ардуино в мегу8, заменить в уно контроллеры, загрузить нужный мне скетч в мегу8 и впаять в плату. Вопрос конечно дурацкий, но все же... Спасибо!
-
Всем здравствуйте. Захотелось считать,в целях саморазвития, информацию с чипа DS2430A и заодно освоить способ связи по однопроводной шине. Посмотрел даташит, много гуглил, вроде более менее понял.С чипом можно связаться по интерфейсу 1-wire. И я решил попробовать это провернуть с помощью ардуины. Написал скетч. Пока получается только считать сигнал присутствия ведомого на шине,а считать из памяти ничего не получается,выдаются одни единицы.Пробовал менять РОМ команды,начинать со старшего бита,младшего,всё равно ничего не получается .Нужна хэлпа, подскажите пожалуйста, где мог допустить ошибку в скетче. И еще если можно мб какую нибудь литературу. /*Подключить пин Мастера надо через полевой транзистор, чтобы отпускать линию было проще для прерывания будет использоваться пин №2 на плате(0 по обозначению) Подключаемся к DS2430A*/ unsigned long save;//переменная для хранения времени byte pinMas = 5;//пин мастера volatile byte pinRead = 6;// пин для чтения линии volatile boolean infa = 1;//пин для хранения состояния линии byte adr[256] = {};//массив для хранения данных int i; /***********************************************************/ void reader() //для записи состояния линии { infa = digitalRead (pinRead);// считвываем состояние линии } /***********************************************************/ void pulseReset() { delayMicroseconds(480);//заряжаем линию, ждём 500 мкс /*___________________________________________________________________*/ digitalWrite(pinMas, 0); //подаем 0, открываем полевик=опускаем линию на ноль delayMicroseconds(480);//ждём 480 мкр digitalWrite (pinMas, 1);//подаём 1, закрываем полевик,отпускаем линию infa = 1;//чтобы в значение линии не сохранился ноль, когда линию дёргает ведущий delayMicroseconds (15);//ждём переходный процесс 15 мкр /*___________________________________________________________________*/ save = micros(); while (micros() - save < 240) {};//Здесь должно сработать прерывание и сохранение значения переменной Serial.print("Presence = ");//выводим состояние линии, если ведомый опустит линию, то Serial.println(infa); //в infa запишется ноль } void comWr0()//передача нуля { digitalWrite(pinMas, 0); //подаем 0, открываем полевик=>опускаем линию на ноль delayMicroseconds(80);//ждём 80 мкc digitalWrite(pinMas, 1);//подаём 1, закрываем полевик,отпускаем линию delayMicroseconds(20);//ждём переходный процесс 15 мкр } void comWr1()//передача единицы { digitalWrite(pinMas, 0); //подаем 0, открываем полевик=>опускаем линию на ноль на 2 мкс delayMicroseconds(3);//ждём 3 мкc digitalWrite(pinMas, 1);//подаём 1, закрываем полевик,отпускаем линию delayMicroseconds(90);//ждём переходный процесс 90 мкc } int comRead() { digitalWrite(pinMas, 0); //подаем 0, открываем полевик=>опускаем линию на ноль на 2 мкс delayMicroseconds(2);//ждём 2 мкc digitalWrite(pinMas, 1);//подаём 1, закрываем полевик,отпускаем линию delayMicroseconds(15); infa = digitalRead(pinRead);//читаем линию return infa;//возвращаем значение переменной infa delayMicroseconds(48);//ждём переходный процесс 48 мкc } void setup() { Serial.begin(9600); attachInterrupt(0, reader, FALLING); pinMode(pinMas, OUTPUT); pinMode (pinRead, INPUT); pulseReset(); /*******************************/ //comWr1(); comWr1(); comWr0(); comWr0(); comWr1(); comWr1(); comWr0(); comWr0(); comWr0(); comWr0(); comWr1(); comWr1(); comWr0(); comWr0(); comWr1(); comWr1();//SKIP ROM CCh с младшего бита /*******************************/ comWr0(); comWr0(); comWr0(); comWr0(); comWr1(); comWr1(); comWr1(); comWr1(); //comWr0(); comWr1(); comWr0(); comWr1(); comWr0(); comWr1(); comWr0(); comWr1(); //comWr1(); comWr0(); comWr1(); comWr0(); comWr1(); comWr0(); comWr1(); comWr0(); //поcылаем AAh с младшего бита /*******************************/ comWr0(); comWr0(); comWr0(); comWr0(); comWr0(); comWr0(); comWr0(); comWr0(); //посылаем адрес for ( i = 0; i < 256; i++) //записываем значение состояний линии в массив { comRead(); adr[i] = comRead(); /* Serial.print("Bit"); Serial.print(i); Serial.print(" = "); Serial.println(adr[i]);*/ } for (i = 0; i < 256; i++) { Serial.print("Bit"); Serial.print(i); Serial.print(" = "); Serial.println(adr[i]); } } void loop() { }
-
Здравствуйте. Захотел я посмотреть как на Arduino Uno (mega328P С кварцем на 16МГц) можно сделать простой генератор меандра, библиотечными digitalWrite() и delay() она начала привирать частоту гдето от 1-2кГц, решил написать на обычном Си. Взял таймер TIM1 с тактировкой от 16МГц с прерыванием по совпадению, и в прерывании обнулял счетчик и просто переключал ножку. interrupt [TIM1_COMPA] void timer1_compa_isr(void) { static unsigned char flag=0;//флаг лог. уровня пина TCNT1H=0x00;//обнуляем счетчик таймера TCNT1L=0x00; // Place your code here if (flag==0){ PORTB = 0x01;//лог 1 flag=1; } else { PORTB = 0x00;//лог 0 flag=0; } } Ожидал что работа с таймером и прерываниями отъест тактов 30-50, на отработку прерывания, заход и выход из него, один if и т.п. И будет у меня максимум килогерц 300 а дальше пойдет врать частоту. Но был удивлен тем что такая система начала привирать частоту уже на 10кГц, где давала 9.7кГц, а на 20кГц уже показывала 19кГц. (проверял точность осцилом). Вот и вопрос неужели таймер с прерыванием настолько медленные ? или я что-то делаю не так ? Полный код на Си если нужно прикреплен. boroda.c