Jump to content

myhhyk

Members
  • Content Count

    6
  • Joined

  • Last visited

Community Reputation

0 Обычный

About myhhyk

  • Rank
    Новенький

Информация

  • Город
    Москва

Электроника

  • Стаж в электронике
    Менее года
  • Сфера радиоэлектроники
    микроконтроллеры

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Есть канал на ютубе хороший, про ассемблер. Найти можно по запросу -Электротехника и электроника для "программеров". Там толковый дядька объясняет язык ассемблера.Начинайте смотреть с 321 лекции. Я сам его засмотрел и теперь ваша задача кажется тривиальной. Там преподаватель и поэтому не вижу смысла давать рыбу, он даст удочку. Удачи!
  2. Здравствуйте. Столкнулся с проблемой в AVR Studio4. Написанный код, при выборе AVR Simulator выполнялся не так как надо, а при выборе AVR Simulator2 всё происходило как надо. Использовал AtMega8a и настраивал FAST PWM на Timer1 со счётом до ICR1. Искал похожие темы на форуме и инете, но не нашел. Хотелось бы узнать в чём разница между симуляторами и в каком направлении нужно любопытствовать. Спасибо за внимание!
  3. myhhyk

    Timer1 PWM AtMega8A

    Нашел в чем проблема. Оказывается если использовать AVR Simulator2 вместо AVR Simulator, то всё работает как надо.
  4. myhhyk

    Timer1 PWM AtMega8A

    .include "m8adef.inc" .cseg main1: LDI R16,Low(RAMEND) ; тут стэк инициализирую OUT SPL,R16 ; LDI R16,High(RAMEND) OUT SPH,R16 ldi r20,1 reset: ldi r16,$02;--ICR1H значение $222 при заданом режиме счетчик должен считать до $222 и сбрасывать в ноль ldi r17,$22;--ICR1L OUT ICR1H,r16;--выводим сначала старший байт, как учили OUT ICR1l,r17;--затем младший ldi r16,$1;---OCR1AH при значении $1AA должен менять пин OCR1A ldi r17,$AA;--OCR1AL OUT OCR1AH,r16;--старший OUT OCR1AL,r17;--и младший ldi r17,$82;--TCCR1A режим такой: WGM-1110 COM-10 ldi r16,$19;--TCCR1B OUT TCCR1B,r16 OUT TCCR1A,r17 ldi r16,$FF OUT DDRB,r16;-- порт б на выход main:;--должны получать шим rjmp main Здравствуйте, помогите пожалуйста. Хочу сделать плавное включение светодиода с помощью ШИМа и Timer1,чтобы плавненько было. Устанавливаю WGM 1110 т.е. быстрый шим и со счетом до ICR1, а счетчик считает почему то до $1ff и потом начинает уменьшать счет до нуля, т.е. как будто я выбрал режим WGM 0110 быстрый ШИМ 9 бит. Пробовал всякие разные комбинации. На значения COM не обращаю пока, он просто меняет момент срабатывания пина, мне нужно, чтобы я мог задавать до скольки считать, потом чтобы в ноль счетчик сбрасывался и менялось состояние пина по OCR1A.В общем принцип работы Timer2, только чтобы счет был больше. Помогите плиз :*) Ах да, AtMega8A микроконтроллер.
  5. Всем спасибо за ответы. Похоже,что реально без библиотеки 1-wire не удастся обмен,т.к. обычные команды занимают много времени и протокол не получается.Приобрел логический анализатор,оказалось,что ардуина без библиотеки не может выдать импульс ровно например 5 мкс. В общем возня с этим 1-wire увела ...к ассемблеру) ЗЫ использовал два пина,чтобы не тратить время контроллера на переподключение порта.Хотя всё равно не вышло ничего)
  6. Всем здравствуйте. Захотелось считать,в целях саморазвития, информацию с чипа 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() { }
×
×
  • Create New...