Jump to content
pakanpak

ATmega16. Проблема с простейшей программой

Recommended Posts

Добрый день, уважаемые форумчане!

Столкнулся с тривиальной проблемой, которую не могу решить. Достав из закромов USBASP, решил поставить дрова на комп и протестировать его на своей Atmega16 - зашить простую мигалку. То есть на нулевой пин порта "А" повесил светодиод и заставил в цикле подавать 1 - задержка  - 0. Проще программы не бывает наверное. Код ниже (ассемблер):

.include "m16def.inc"
.def temp = r16

.org 0
rjmp reset

Reset:				// порт на вывод
	
	ldi temp,255
	out ddra,temp
	out porta,temp

start:				//цикл мигалки
	clr temp
	out porta,temp
	rcall del

	ser temp
	out porta,temp
	rcall del
rjmp start

del:				//стандартная задержка
	ldi r17,255
	ldi r18,255
	ldi r19,10
	del2:
		dec r17
		brne del2
		dec r18
		brne del2
		dec r19
		brne del2
ret

Очевидно, что в коде ошибки нет. Протестировано в протеусе)

Но после прошивки МК, на нужной ноге не происходит смена состояний. То есть светодиод загорается и не мигает - просто горит. Поменял порты - тоже самое. С фьюзами вроде тоже все нормально - скрины прилагаю. Шил и хазамой, и дудкой. Использовал USBASP. Сигнатура читается , фьюзы меняются - все хорошо. Менял чип на аналогичный - все тоже самое. Схема соединения - думаю не стоит выкладывать)) Короче, я в тупике. Настолько дурацкая проблема, что я даже не знаю что думать. Может проблема в том, что в я не отсоединяю МК от USBASP ( MOSI, MISO, SCK, RESET) ? 

 

скрин1.png

скрин2.png

Share this post


Link to post
Share on other sites

для использования команды rcall необходимо в начале программы инициализировать стек:

LDI	R16, low(RAMEND)
OUT	SPL, R16
LDI	R16, high(RAMEND)
OUT	SPH, R16

Share this post


Link to post
Share on other sites

Возможно, у меня такая проблема была с APU-2, он не отпускает reset. Нужно перекомпилировать дудку. Но c usbasp не наблюдадось. А просто снять ресет и проверить, не?


Настоящему коту и в декабре март!

Share this post


Link to post
Share on other sites

Запускаем новый BLE 5.2-чип BlueNRG-LP от STMicroelectronics

Любая разработка начинается с чтения документации и изучения доступных средств разработки. Данный материал целиком посвящен средствам разработки, включая детальные инструкции по запуску вашего первого приложения на BlueNRG-LP. Описана работа с отладкой STEVAL-IDB011V1, набором инструментов и пакетом ПО позволяющим разработчику быстро войти в курс дела.

Подробнее

11 минуту назад, dm37 сказал:

для использования команды rcall необходимо в начале программы инициализировать стек:


LDI	R16, low(RAMEND)
OUT	SPL, R16
LDI	R16, high(RAMEND)
OUT	SPH, R16

Вот я затупил... Спасибо большой за тычок пальцем. Тот момент когда смотришь в упор и не видишь нихрена)

Share this post


Link to post
Share on other sites

Революция в силовой электронике. Начало

Что привлекает в SiC по сравнению с кремнием, и какие особенности делают компоненты SiC часто используемыми, несмотря на более высокую стоимость в сравнении с кремниевыми высоковольтными устройствами? – Объясняет специалист ведущего разработчика силовых приборов из карбида кремния, компании Infineon.

Подробнее

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Все в Ваших руках. Редактируйте static const unsigned char PROGMEM VUMeter[] и скорректируйте отрисовку стрелки.
    • Ограничивай свой минимум на уровне 1.5...2 В, тогда всё должно работать.
    • Посмотри вариант от Л.И. Ридико. Я применял это решение для китайского крохотного повышающего модуля на 3608.
    • @sanya110 Китайцы используют максимум из этого сердечника. Другое дело, что русский человек может взять вентилятор, и этот же сердечник станет габаритной мощностью 1000 Вт. В электронных трансформаторах нет вентилятора, корпус закрытый, поэтому габаритная мощность трансформатора на 200 Вт составляет 200 Вт, а не 1000 или 600, как русскому видится 
    • Краб пускай пугает клиентов! 
    • Мой гидрораспределитель называется пропорциональный гидравлический гидрораспределитель, он может регулировать величину потока. Я  долго не мог понять почему моя прессформа дергается, когда она начинает движение дергается, с перехода с одной скорости на другую дергается и не мог понять в чем проблема в гидравлике или в электронике. (думал я в гидравлике - я ошибался). Очень долго не мог понять как  должна работать электроника, какие формы сигнала должны  быть. Все таки я разобрался какие формы сигнала должны быть, но все также  не могу понять как это вся схема работает и как ее отладить.  Поясняю из той схемы что я понял. Мой гидрораспределитель может изменять величину потока масла заданным напряжением, от этого зависит поедет моя пресс-форма быстрее или медленнее. Моя эл. схема может работать без  генератора  4007 и счетчика делителя 4017, что же будет происходить - пресс форма при движение будет дергаться, а что сделать чтобы она не дергалась,   для этого и сделали часть эл. схемы из генератора  4007 и счетчика делителя 4017. С генератора подается прямоугольный сигнал на счетчик делитель, счетчика делителя на выходе тоже прямоугольный сигнал (счетчиком делителем 4017 можно регулировать скважность сигнала) и все это идет через делитель R55,R53 и R52 (100:1) и подается на LM358 через всякие резисторы и транзистор 2N 6045. Я вам сейчас покажу какая же форма сигнала должна быть в точке № 11 при правильно настроенной эл. схемы. Это пакеты с импульсами. форма сигнала в точке № 6 форма сигнала в точке № 7 а вот форма сигнала в точке № 11 это пакеты с импульсами  эти пакеты с импульсами и нужны для плавно движения пресс формы при этом сигнале движение пресс формы не происходит 
    • У сестры есть вроде бы такая же шарманка, могу попросить привезти её, вот только когда это будет - большой вопрос. Если время терпит, могу узнать
  • Similar Content

    • By sunjob
      добрый день
      проект v-usb
      выкус из спецификации/инета/форумов:
      - реализация не полностью соответствует стандарту
      - работа на 100% не гарантируется
      - питание по USB / с компа может провалиться до 4-4.5В (а F_CPU идет в "притирочку" ...)  :))
      у всех рекомендованных схем подключения (3 шт) имеются те или иные очевидные минусы.



      как следствие стабильно может работать только при "определенных условиях"
      в планах поработать с библиотекой.
      для начало решил "набросать" альтернативный вариант. (так сказать, попытаться закрыть все возможные дыры в подключении)


       
      достаем помидоры, баркова, мысли, высказываемся (заранее благодарен)
      tag: v-usb, usb, avr, atmega328p, avr-gcc, linux/mac-osx
      NO atmega32u4, NO arduino pro micro etc...

    • By Evgenii53
      Здравствуйте.
      Нужна прошивка на микроконтроллер 12F629/675.
      Схема скачана в интернете и предназначена для освещения курятника лампами накаливания 220 вольт с имитацией «восхода и заката».
       Временные интервалы «восхода и заката» выбраны 6 утра и 21 час вечера.
      Длительность «восхода и заката» по 20 минут (лампы медленно загораются или гаснут под управлением симистора).
      Если в дневное время срабатывает датчик освещённости (фоторезистор HER –  GL5528), лампы не включаются и включаются, когда он разрешит, в ночное время фоторезистор бездействует. Фоторезистор можно (или нужно?) переключить на 5 ногу.
      Нужно установить программное ограничение на срабатывание датчика освещения от кратковременного изменения освещённости (например падение света фар движущегося автомобиля на датчик и т.д). Фоторезистор устанавливается на кабеле длинной около 2 метра.
      Логика работы кнопки: длительное нажатие (больше 3 секунд), устанавливает внутренние часы на полдень.  Время синхронизируется от сети 50Гц.
      Светодиод отображает наличие питания сети. Если сеть есть, он всё время светится и раз в 2 секунды кратко моргает. Если сети нет и устройство питается от батарей, светодиод погашен и раз в 2 секунды вспыхивает. При установке времени полдня светодиод несколько раз моргает.
      Схема рабочая, я проверял в работе (без фоторезистора) на тестовой прошивке, работает нормально.
      По оплате, думаю договоримся.

    • By Ivarrr
      Помогите понять где ошибка... не получается реализовать попеременный опрос 2ух каналов АЦП. Данные с одного канала должны передаваться на первый индикатор как напряжение, а со второго, соответственно на второй индикатор как сила тока.
       
      #define F_CPU 8000000U
      #include <avr/io.h>
      #include <avr/interrupt.h>
      #include <stdlib.h>
      #include <util/delay.h>
      #define INDICATOR PORTD
      #define RANK PORTB
      unsigned int UR1=0, UR2=0, UR3=0, UR4=0; //переменные для деления на разряды значения напряжения
      unsigned int IR1=0, IR2=0, IR3=0, IR4=0; //переменные для деления на разряды значения силы тока
      int GainControl=1;
      int current_ch=0;
      float I, U;
      unsigned char voltage, current;
      unsigned int NUMS [10] = {0b11000000, 0b11111001, 0b10100100, 0b10110000, 0b10011001, 0b10010010, 0b10000010, 0b11111000, 0b10000000, 0b10010000}; // от 0 до 9
      int main(void)
      {
          DDRB=0xFF; PORTB=0x00; //ножки порта B для разряда
          DDRC=0x00; PORTC=0x00; //ножки порта C для АЦП
          DDRD=0xFF; PORTD=0xFF; //ножки порта D для индикаторов
          
          TCCR0 |= (1<<CS01); TCCR0 &= ~((1<<CS00) | (1<<CS02)); //настройка частоты таймера f/8
          TIMSK |= (1<<TOIE0); //разрешение прерываний по переполнению таймера
          TCNT0=0; // обнуление счетчика
          
          ADCSRA |= ((1<<ADEN) | (1<<ADSC) | (1<<ADPS2)); // запуск АЦП, запуск преобразования, предделитель 16
          ADCSRA &= ~((1<<ADFR) | (1<<ADIF) | (1<<ADPS1) | (1<<ADPS0)); // режим преобразвания прерывестый, флаг перобразования опущен, предделитель 16
          ADMUX |= ((1<<REFS0) | (1<<REFS1)); //источник опорного напряжения 2.56В
          ADMUX &= ~((1<<ADLAR) | (1<<MUX0) | (1<<MUX1) | (1<< MUX2) | (1<<MUX3)); // направление записи, измерительная ножка ADC0;
          
          sei(); // вкл прерывания
          while (1) 
          {
              if (ADCSRA & (1<<ADIF))
              {
                          U_Convert((U*5.00/1024)*100);
                          I_convert((I*5.00/1024)*100);
              }
          }
      }
      void U_Convert (unsigned int U_num)  //деление на разряды напряжения
      {
          UR1=U_num/100;
          UR2=U_num%100/10;
          UR3=U_num%10;
      }
      void I_convert (unsigned int I_num) //деление на разряды тока
      {    IR1=I_num/100;
          IR2=I_num%100/10;
          IR3=I_num%10;
      }
      ISR (TIMER0_OVF_vect)
      {        
          if (GainControl == 1) {INDICATOR = 0b11111110; RANK = NUMS[UR1];} //отображение 1ого разряда напряжения
          if (GainControl == 2) {INDICATOR = 0b11111101; RANK = NUMS[UR2];} //отображение 2ого разряда напряжения
          if (GainControl == 3) {INDICATOR = 0b11111011; RANK = NUMS[UR3];} //отображение 3ого разряда напряжения    
          if (GainControl == 4) {INDICATOR = 0b11110111; RANK = NUMS[IR1];} //отображение 1ого разряды силы тока
          if (GainControl == 5) {INDICATOR = 0b11101111; RANK = NUMS[IR2];} //отображение 2ого разряды силы тока
          if (GainControl == 6) {INDICATOR = 0b11011111; RANK = NUMS[IR3];} //отображение 3ого разряды силы тока
          GainControl++;
          if (GainControl > 6) GainControl=0; //  мониторинг переменной для управления затворами    
      }
      ISR (ADC_vect) 
      {
          if (current_ch == 0)
            {
                U = ADC;
                voltage = (U*2.56/1024)*100;
                ADMUX |= (1<<MUX0);
                current_ch = 1;
                ADCSRA |= (1<<ADSC);
            }
            else
            {
                I = ADC;
                current = (I*2.56/1024)*100;
                ADMUX &= ~(1<<MUX0);
                current_ch = 0;
                ADCSRA |= (1<<ADSC);
            }
      }
    • By LemonTV
      Планшет Lenovo yoga tablet 2 10-50f при включении вылазит текст (смотр фото). Как исправить? В диспетчере задач на компьютере не отображается, при подключении планшета к ПК, либо если зажать кнопку громкости и кнопку включения то вылазит этот текст, что на фото + написано "press esc in 1 seconds to skip startup.nsh, any other key to continue " в рекавери не заходит, потребление при зарядке 0,45 А. Полетела emmc? Или можно как-то прошить? 

    • By LemonTV
      Планшет Lenovo yoga tablet 2 10-50f при включении вылазит текст (смотр фото). Как исправить? В диспетчере задач на компьютере не отображается, при подключении планшета к ПК, либо если зажать кнопку громкости и кнопку включения то вылазит этот текст, что на фото + написано "press esc in 1 seconds to skip startup.nsh, any other key to continue " в рекавери не заходит, потребление при зарядке 0,45 А. Полетела emmc? Или можно как-то прошить? 

×
×
  • Create New...