#1 Re: Разное » Помогите начинающему с ATMega128 » 2020-03-25 14:22:07

Не помогло. Тогда остается причина - чтото с самим контролером?

#2 Re: Разное » Помогите начинающему с ATMega128 » 2020-03-24 13:14:20

Дабы разобраться не в среде ли дело, не согласится ли кто-то скомпилить код и переслать мне бинарный файл для заливки.
Atmega125a 8мг

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

volatile unsigned char z1;

ISR(TIMER0_OVF_vect)
{
    z1++;
    if (z1<=250) {return;}
       
    z1=0;   
    PORTA ^= (1<<PA4);
}
   
int main(void)
{
   
//TIMER0 -------------------------------------------------
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: Normal top=0xFF
// OC0 output: Disconnected
// Timer Period: 9,984 ms
ASSR=0<<AS0;
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (1<<CS02) | (1<<CS01) | (1<<CS00);
TCNT0=0xB2;
OCR0=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (1<<TOIE0);
ETIMSK=(0<<TICIE3) | (0<<OCIE3A) | (0<<OCIE3B) | (0<<TOIE3) | (0<<OCIE3C) | (0<<OCIE1C);

    DDRA = 0xFF;
    DDRD = 0xFF;
    PORTA = 0;
    PORTD = 0;
    z1=0;
   
    sei();

    PORTA |= (1<<PA4); _delay_ms(1000);
    PORTD |= (1<<PD5); _delay_ms(1000);

    PORTA |= (1<<PA3); _delay_ms(1000);
    PORTA |= (1<<PA5); _delay_ms(1000);
    PORTA |= (1<<PA6); _delay_ms(1000);

    PORTA = 0;
    PORTD = 0;

    while (1)
    {
        PORTD ^= (1<<PD5); _delay_ms(500);
    }
}

#3 Re: Разное » Помогите начинающему с ATMega128 » 2020-03-23 16:31:59

Kaka пишет:
VLDnepr пишет:

что я делаю не так

Не читаешь, что тебе пишут. Я ж тебе уже написал, что у меня твой код работает, значит, дело не в коде.

VLDnepr пишет:

Не суть какой делитель устанавлиывется

С точки зрения работоспособности кода, не влияет, а вот с точки зрения "общей аккуратности" ... если ты говоришь, что делитель такой, а он совсем другой, какие у меня основания доверять, что у тебя там в вправду 128-ая на 8МГц, а не 32U на 20?

VLDnepr пишет:

Фьюзы как по мне тут непричем

Ну, тебе виднее. Раз ты всё и сам знаешь - что причём, а что - нет, зачем было сюда обращаться?

Мне не видно, потому и обратился.
Но и надпись типа "... Поэтому, смотри на фьюзы, всё ли там в порядке. ..." - тоже очень информативна, конкретна и после нее сразу понятно куда смотреть и что делать.

#4 Re: Разное » Помогите начинающему с ATMega128 » 2020-03-23 15:28:16

Что не ясновидец - понятно.

AtmelStudio menu Project\Device\CurrentDevice: ATmega128

#5 Re: Разное » Помогите начинающему с ATMega128 » 2020-03-23 14:25:24

Код в посте выше приводил копипастом, без правки.
Результат тотже, если раскоментировать строки установки TIMSK - сразу после сброса зажигается первый светодиод (в данном коде это PD5) и все. Такое ощущение что программа вешается на
_delay_ms(1000);

потому как если раскоментировать строку
//PORTA |= (1<<PA4); _delay_ms(1000);

записало все после зажигания PA4, это все при том что сейчас обработчик ISR(TIMER0_OVF_vect) пустой

может ли зависать _delay_ms?




#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

volatile unsigned char z1;

ISR(TIMER0_OVF_vect)
{
}

ISR(INT1_vect){PORTD |= (1<<PA3);}
ISR(INT2_vect){PORTD |= (1<<PA3);}
ISR(INT3_vect){PORTD |= (1<<PA3);}
ISR(INT4_vect){PORTD |= (1<<PA3);}
ISR(INT5_vect){PORTD |= (1<<PA3);}
ISR(INT6_vect){PORTD |= (1<<PA3);}
ISR(INT7_vect){PORTD |= (1<<PA3);}
   
ISR(TIMER0_COMP_vect){PORTD |= (1<<PA5);}

ISR(TIMER1_CAPT_vect){PORTD |= (1<<PA5);}
ISR(TIMER1_COMPA_vect){PORTD |= (1<<PA5);}
ISR(TIMER1_COMPB_vect){PORTD |= (1<<PA5);}
ISR(TIMER1_OVF_vect){PORTD |= (1<<PA5);}
   
ISR(TIMER3_CAPT_vect){PORTD |= (1<<PA6);}
ISR(TIMER3_COMPA_vect){PORTD |= (1<<PA6);}
ISR(TIMER3_COMPB_vect){PORTD |= (1<<PA6);}
ISR(TIMER3_COMPC_vect){PORTD |= (1<<PA6);}
ISR(TIMER3_OVF_vect){PORTD |= (1<<PA6);}
ISR(USART1_RX_vect){PORTD |= (1<<PA6);}
ISR(USART1_UDRE_vect){PORTD |= (1<<PA6);}
ISR(USART1_TX_vect){PORTD |= (1<<PA6);}
ISR(TWI_vect){PORTD |= (1<<PA6);}
ISR(SPM_READY_vect){PORTD |= (1<<PA6);}
   
   
int main(void)
{
   
//TIMER0 -------------------------------------------------
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: Normal top=0xFF
// OC0 output: Disconnected
// Timer Period: 9,984 ms
ASSR=0<<AS0;
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (1<<CS02) | (1<<CS01) | (1<<CS00);
TCNT0=0xB2;
OCR0=0x00;


// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (1<<TOIE0);
ETIMSK=(0<<TICIE3) | (0<<OCIE3A) | (0<<OCIE3B) | (0<<TOIE3) | (0<<OCIE3C) | (0<<OCIE1C);


    DDRA = 0xFF;
    DDRD = 0xFF;
    PORTA = 0;
    PORTD = 0;
    z1=0;
   
    sei();

    //PORTA |= (1<<PA4); _delay_ms(1000);
    PORTD |= (1<<PD5); _delay_ms(1000);

    PORTA |= (1<<PA3); _delay_ms(1000);
    PORTA |= (1<<PA5); _delay_ms(1000);
    PORTA |= (1<<PA6); _delay_ms(1000);


    PORTA = 0;
    PORTD = 0;
   
   

    while (1)
    {
        PORTD ^= (1<<PD5); _delay_ms(500);
    }
}

#6 Re: Разное » Помогите начинающему с ATMega128 » 2020-03-23 12:15:17

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

Еще раз
1.Полный код приведен ниже, контроллер atmega128a, 8 мг
2.Не суть какой делитель устанавлиывется, суть вопроса в прекращении работы основного цикла
3.Сгенерировал настройки таймера в CodeVisionAVR
4.Фьюзы как по мне тут непричем, ну или подскажите как они влияют.
5.Из подключенный внешних устройств только USBASP на USART0.
6.Только что рассмотрел, что при подаче питания сразу зажигается PA4 и больше ничего не происходит.
7.Если закоментировать TIMSK=...  и ETIMSK=.... - все работает как написано, т.е. код в преравыние не заходит, т.к. перавание таймара не разрешено, основной цикл моргает.


Что то-то не так, не понимаю что именно.
Буду благодарен, если подскажете.

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

volatile unsigned char z1;

ISR(TIMER0_OVF_vect)
{
    TCNT0=0xB2;

    z1++;
    if (z1<=250) {return;}
       
    z1=0;   
    PORTA ^= (1<<PA4);
}

int main(void)
{
   
//TIMER0 -------------------------------------------------
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: Normal top=0xFF
// OC0 output: Disconnected
// Timer Period: 9,984 ms
ASSR=0<<AS0;
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (1<<CS02) | (1<<CS01) | (1<<CS00);
TCNT0=0xB2;
OCR0=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (1<<TOIE0);
ETIMSK=(0<<TICIE3) | (0<<OCIE3A) | (0<<OCIE3B) | (0<<TOIE3) | (0<<OCIE3C) | (0<<OCIE1C);


    DDRA = 0xFF;
    DDRD = 0xFF;
    PORTA = 0;
    PORTD = 0;
    z1=0;
   
    sei();

    PORTA |= (1<<PA4); _delay_ms(1000);
    PORTD |= (1<<PD5); _delay_ms(1000);

    PORTA = 0;
    PORTD = 0;

    while (1)
    {
        PORTD ^= (1<<PD5); _delay_ms(500);
    }
}

#7 Re: Разное » Помогите начинающему с ATMega128 » 2020-03-20 19:18:33

это понятно, в прерывании просто тестовый код.
Почему перестает работать основной цикл, вот в чем вопрос? PD5 не моргает, просто не горит.

#8 Разное » Помогите начинающему с ATMega128 » 2020-03-20 18:40:59

VLDnepr
Ответов: 20

Помогите, пожалуйста, разобраться.
Наинаю осваивать программирование контроллеров.
До этого немного покаталсяна меге16, все относительно понятно и получалось
Решил перейти на мега 128 - не могу запустить простое мигание светодиодом через прерывание

Если закоментировать sei(); работает основной цикл.
Но при раскоментировании зажигается PA4 и горит постоянно, а PD5 (основной цикл) не моргает.

Не понимаю почему не работает основной цикл?

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

ISR(TIMER0_OVF_vect)
{
    PORTA |= (1<<PA4);
}



int main(void)
{
    //TIMER0 -------------------------------------------------
    TCCR0 |= (1<<CS02)|(1<<CS00); // устанавливаем прескалер - 1024
    TIFR = 1<<TOV0; // очищаем флаг прерывания таймера Т0
    TIMSK |= 1<<TOIE0; // разрешаем прерывание по переполнению
    TCNT0 = 0; // загружаем начальное зн. в счетный регистр

    sei();

        DDRA = 0xFF;
        DDRD = 0xFF;
   
    PORTA |= (1<<PA4); _delay_ms(500);
    PORTD |= (1<<PD5); _delay_ms(500);

    PORTA = 0;
    PORTD = 0;
    while (1)
    {
        PORTD ^= (1<<PD5); _delay_ms(500);
    }
}

#9 Re: Разное » Помогите начинающему запустить ATMega128 (г.Днепр) » 2020-02-20 09:52:49

Green пишет:

Так вон же Кино всё выложил на блюдечке. Или мало?

А можно ссылку?

#10 Re: Разное » Помогите начинающему запустить ATMega128 (г.Днепр) » 2020-02-19 15:47:28

Блин, какой однако контроллер я выбрал.
Неужто с ним все так сложно и нет мастеров.

#11 Re: Разное » Помогите начинающему запустить ATMega128 (г.Днепр) » 2020-02-19 13:32:26

Попробовал несколько bootloader
http://robot-develop.org/archives/1092
http://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-bootloadera.html

Сам не разберусь, только начинаю осваивать.

#12 Re: Разное » Помогите начинающему запустить ATMega128 (г.Днепр) » 2020-02-18 18:58:31

Спасибо за подсказки. Контроллер подключил, USBArt читает, пишет.
Есть желание перейти на заливку кода через бутлоадер.

Подскажите, пожалуйста, нормальный и не сложный (для начинающего) бутлоадер для atmega128

Пробовал http://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-bootloadera.html,
чтото не смог осилить, после заливки светодиод загорается и не гаснет, т.е. насколько я понял вополнение попадает в загнрузчик и там виснет.

#13 Re: Разное » Помогите начинающему запустить ATMega128 (г.Днепр) » 2020-02-07 19:17:00

Т.е. или USBasp или USART для com порта.
Параллельно их нельзя включать?

#14 Re: Разное » Помогите начинающему запустить ATMega128 (г.Днепр) » 2020-02-07 11:57:51

Подскажите, пожалуйста, еще один вопрос.
У меня програматор USBasp.
Получается, что я лишился USART0, подключив USBasp по вышеуказанной схеме?

Можно ли это как-то обойти?

Предполагалось что програматор я подключу к MISO, MOSI, а USART0 использую для подключения к компьютеру через COM-USB переходник (USB to TTL YP-01).
Второй USART (USART1) предполагалось в последующем использовать для соединения с GSM модулем.

#15 Re: Разное » Лазерная резка » 2020-02-05 10:33:01

У меня контора закупила лазерный резак и режет фанеру. Думаю что можно договориться. Для начала нужен макет резки, например в CorelDraw, и количество. Цену можно будет узнать. Это в Днепре.

#16 Re: Разное » Помогите начинающему запустить ATMega128 (г.Днепр) » 2020-02-05 10:29:43

Разобрался.
На самом деле ноги програмирования не соответствуют проведенному в даташите.
Для 128 меги ноги программирования - другие

MOSI PE0
MISO PE1
SCK PB1

Подключил - заработало. Теперь хочу найти эту информацию  в описании, ведь где-то это написано.

#17 Разное » Помогите начинающему запустить ATMega128 (г.Днепр) » 2020-02-04 21:45:59

VLDnepr
Ответов: 22

Здравствуйте.
Есть давнее желание поработать с контроллерами.

Купил контроллер, програматор USBasp и прочее.
По началу купил ATMega128. Припаял ее к переходнику с TQFP64.
Присоединил в программатору - не видит он контроллер.
Вознкла мыли что либо спалил контроллер лбо чтото с програматором.
Купил ATMega8 в DIP корпусе - поставил на макетную плату - програматор увидел его, все работает.

Купил второй контроллер ATMega128, перепаял на переходник - опять не работает.

Может у кого-то есть возможность подсоединить контроллер к своему програматору и проверить работоспособность, может у меня програматор кривой, может руки кривые или присоединил не так.

На контроллер подал питание, присоединил програматор. Пытался с и без кварца.
Должен ли контроллер ATMega128 работать без обвеса (ATMega8 работал)?

Подвал раздела