Перейти к содержанию

timon_ad

Members
  • Постов

    21
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные timon_ad

  1. Люди! Помогите!

    Скачал и установил proteus 7,10 (по размеру выбрал самую большую по весу). Запускаю ISIS и выбираю скажем atmega8a, а в выпадающем списке есть только atmega8 (без A). Тоже самое и с моей микрой attiny261A , в списке тоже без А.

    Вопрос: Это так надо или я что-то делаю не так? :)

    Если проблема в проге, прошу скинуть ссылку на торрент (наверно придется в личку :))

    Заранее спасибо!!!

    Да в одной из лекций говорили что 8а чуть быстрее, а так они не отличаются. так что можете девелопить под 8. я думаю ничего страшного не будет.

  2. Какая то у меня коротенькая программка получилась:

    #include <avr/io.h>
    #include <util/delay.h>
    #include <stdlib.h>
    
    // задаем токены, кот. будут использоватся в программе
    #define PORT_OUT 0xFF
    #define PORT_OFF 0x00
    #define PORT_ON 0xFF
    #define PORT_B_NUM 0
    #define PORT_C_NUM 1
    #define PORT_D_NUM 2
    
    // функция для начальной инициализации МК
    void preset()
    {
    // инициализируем PORT B
    DDRB = PORT_OUT;
    PORTB = PORT_OFF;
    
    // инициализируем PORT C
    DDRC = PORT_OUT;
    PORTC = PORT_OFF;
    
    // инициализируем PORT D
    DDRD = PORT_OUT;
    PORTD = PORT_OFF;
    }
    int main(void)
    {
    preset();
    while(1)
    {
    int port_num = rand() % 3; // случайным образом выбираем один из портов
    int led_num = port_num == PORT_C_NUM ? rand() % 7 : rand() % 8; // выбираем диод кот. будет зажигатся (поскольку PORT C имеет только 7 ножек, то берем остаток от деления на 7)
    
    // на выбранном порту зажигаем, выбранный диод
    switch(port_num){
    case PORT_B_NUM:
    PORTB = 1 << led_num;
    break;
    
    case PORT_C_NUM:
    PORTC = 1 << led_num;
    break;
    
    case PORT_D_NUM:
    PORTD = 1 << led_num;
    break;
    }
    
    _delay_ms(500);
    
    // тушим все диоды
    PORTB = PORT_OFF;
    PORTC = PORT_OFF;
    PORTD = PORT_OFF;
    _delay_ms(100);
    }
    }
    

    Но главное что работает =)

  3. Александр да Вы правы конечно, но курс все же для новечков которые имеют определенные знания по электронике и хотят перейти на изучение именно микроконтролеров.А если ориентироваться на таких мужичков которым ни какие уроки не помогут,можно до конца века клепать уроки и все будет безрезультатно.

    А почему по электронике? У нас допустим препод был в универе прожил на мк, а его коллега хорошо разбирался в железе. Вот и я допустим учил когда то Си и кое чего помню, но вот электроники не было. Поэтому давайте не будем рассказывать нашему лектору, как и что ему делать. А если хотите то велком новую тему на форуме и давайте людям Си. ;)

  4. Тема очень хорошая Кобразу респект! Vasili у меня были подобные проблеммы один в один.Основная проблема обявлять частоту процессора надо не окне написания кода,а в насторйках толчан, симболс F_CPU=1000000UL добавьте строчку и все заработает .У меня прога даже не могла зациклица при бесконечном цикле равном 1. Данная фишка по ходу только для 6 студии.

    Вот у меня была такая же проблема была решилась с помощью симболс! Спасибо rv3sbq!

    Коротко: RSTDISBL надо поставить в Programmed в настройках микроконтроллера!

    Только полностью отдав себе отчет в том, что дальнейшие эксперименты с этим МК будут прекращены, если вы не обладаете параллельным программатором.

    Спасибо за предостережение! новичокс, что скажешь... Хотел просто заставить мигать эту ножку тоже. Но на будущее буду иметь ввиду про RESET.

  5. Да установлены: http://gyazo.com/9fb...6016bae42231ea3

    вот код: https://www.dropbox....yfb/Lesson2.zip

    Нашел в чем причина: http://gyazo.com/e24...1985e965c6a3c2e

    Коротко: RSTDISBL надо поставить в Programmed в настройках микроконтроллера!

    Вывод: смотреть сначала в даташит. :umnik2:

  6. я не думаю что это проблема дефайнов, насколько помню из курса по С: они подменяются на этапе компиляции. Но я попробовал и такое же поведение. При запуске загорается порт синим (ноль), а затем горит серым. Может дело в том что я даю на порт 0xFF а там 7 ног вместо 8-ми?

  7. PORTB = 0xFF;// вот тут он не будет останавливаться почему-то

    Оптимизацию проверьте, должна быть выключена

    А где посмотреть? обыскал всю студию галочки по поводу оптимизации не нашел.

    Господа из вопросов кот. еще возникли почему у меня порт PC6 светится серым и отказывается мигать? программка примитивная:

    //Atmega8A
    #define F_CPU 8000000
    #include <avr/io.h>
    #include <util/delay.h>
    #define PORT_OUT 0xFF;
    #define PORT_OFF 0x00;
    #define PORT_ON 0xFF;
    void preset()
    {
    // PORT B
    DDRB = PORT_OUT;
    PORTB = PORT_OFF;
    
    DDRC = PORT_OUT;
    PORTC = PORT_OFF;
    
    DDRD = PORT_OUT;
    PORTD = PORT_OFF;
    }
    int main(void)
    {
    preset();
    while(1)
    {
    PORTB = PORT_OFF;
    PORTC = PORT_OFF;
    PORTD = PORT_OFF;
    _delay_ms(1000);
    
    PORTB = PORT_ON;
    PORTC = PORT_ON;
    PORTD = PORT_ON;
    _delay_ms(1000);
    }
    }
    

  8. У вас же цикл - для того что бы выполнить последнюю строку нужен еще один переход (степ) - а так как у вас дальше изменений нет - то и степ не происходит!

    не совсем понял. Смотрите если нету след. степа но есть цикл, то он должен возвращатся на 1-ую инструкцию.

    В качестве примера можете расскоментировать "PORTB = 0xFF" тогда он будет бегать по 2-ой и 3-ей инструкции а на 1-ую не заходить

    Т.е.:

    while(1)
    {
    	PORTB = 0xFF;// вот тут он не будет останавливаться почему-то
    
    	PORTB = 0x00;//PORT_OFF; // тут будет начало цикла, те при прогонке эта почему то будет 1-ая инструкция
    
    	PORTB = 0xFF;//тут будет конец цикла, последний степ. после чего он должен будет перейти на 1-ую, а не на 2-ую
    }

  9. переназвал все равно зависает на "PORTB = 0x00;" =(

    И еще пару вопросов по теории:

    Зачем нужны ограничивающие резисторы? и почему именно 220 Ом?

    Если написать:

    while(1)
    {
    	PORTB = 0xFF;//PORT_ON;
    //_delay_ms(1000);
    
    PORTB = 0x00;//PORT_OFF;
    //_delay_ms(1000);
    
    PORTB = 0xFF;//PORT_ON;
    }

    то дебаг скачет со 2-ого PORTB на 3-ий PORTB. почему на 1-ый не идет не знаю???

  10. А у меня проблемка, не хочет работать даже пример из видео. такое ощущение после установки "PORTB = 0xFF;" что то происходит и дальше дебаг не идет.

    Вот код: http://gyazo.com/cfd7ddffeb91b045e6936b6e261a93a3

    А вот что я вижу когда делаю "Step Over" на "PORTB = 0xFF;": http://gyazo.com/aa706403e1ac2d49bfe8a9b7060fadda

    Если же закоментировать delay то выполение переходит на "PORTB = 0x00;", если потом снова нажать на "Step Over" то выполение остается на "PORTB = 0x00;", те. не переходит на while: http://gyazo.com/71b6c936f27861ae7c359882ff11e22d

    Может я что то не сконфигурил? HELP Please :)

  11. Добрый День! Отличный курс. Раскажите новичку я видел в самом конце лекций планируется собирать все на железе. Можете перечислить, что понадобится для этого? какие детали? какой лутше (или какой будет использоватся) программатор? и т.д. Что бы не возникло потом проблем с закупкой необходимого.

    Заранее спасибо! :)

×
×
  • Создать...