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

Atmega128 И Программатор К Нему


Рекомендуемые сообщения

программатор ET-AVR ISP и контроллер АТМега128. Я прошивал уже готовую контроллерную плату с помощью программы PonyProg.

На плате разъем для программатора IDC10. Теперь же мне надо самому разработать плату и сделать вывода на ней для этого же

программатора. Что то не пойму какие. Как я понял контроллер прошивается через SPI. Может кто поможет?

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

А через какой интерфейс прошивалась плата раньше? Паралельный или серийный? Если паралельный - то всё просто - или 4 резистора с серию или сложней с буферами, если серийный то надо будет подгонять уровни к ТТЛ.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Да. Значит что тот софт работал с паралельным програматором. Ещё возникает вопрос если там небыл BOOT лоадер. Если нет - то тогда самый простой програматор с 5 проводками будет работать.. Поискать по форуму - тут об этом было море информации...

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

не знаю что такое - BOOT лоадер.)) мне не нужен программатор. Он у меня остался. Мне нужно знать какие вывода МК на плате нужно выводить на разъем IDC10 к которому я подключаю этот программатор))

Ссылка на комментарий
Поделиться на другие сайты

Ясно. Надеюсь что ваш програматор будет стандартный :) Прошивать будем ту же мега128? если да то вот рисунок стандартного разьёма:

isp.jpg

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

P.S. Вот нашел случайно линк http://1010.co.uk/avrprog.html там описано и подключение 128 меги.. Я только щас догнал что их и не делали в большом корпусе :)

Ссылка на комментарий
Поделиться на другие сайты

Я бы перед тем как подключать всё это - померил если там на вашем програматоре есть соединение между 4,6,8 и 10 выводом... Если есть то скорей всего будет стандарт...

Ссылка на комментарий
Поделиться на другие сайты

А это такой вывод для подключения Диода.. Иногда его используют для дополнительной частоты для програмирования без кварца с наставлеными фюзами на внешнюю частоту... Вобщем - необращать на это внимания :) И без него должно работать :)

Ссылка на комментарий
Поделиться на другие сайты

А вот это и есть тот второй случай когда используется boot Loader. Я думаю что если использовать для опытов дома - то лучше акуратно перерезать провода и вывести на ISP MOSI и MISO как положено или сделать переключатель :) Ну или поискать boot Loader и напрограмировать его.. Хотя ещё он там может уже быть.. Тогда просто посмотреть с какой системой он совместим...

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

boot loader это програма которая зашивается в специальное место в памяти и запускается как первая. Если до 2 секунд не появилось на внешнем порту сигнал или данные на серийном порту то запускат главную програму. Если появились данные то зашивает эти данные на место програмы и после успешной записи опять запускает главную програму. Для работы с boot loader обычно не нужен програмер. Достаточно терминала который умеет послать фаил по сериалу..

Ссылка на комментарий
Поделиться на другие сайты

Програмер именно этим и занимается - переводит сигнал из компа на подходящий для МК. Проблема в том что использует довольно много контактов и не всегда стандартный интерфейс и програму для управления им. boot loader использует всего 3 (можно вообще 2 обойтись) провода. Но для стандартизации и защиты использует RS232.

Ссылка на комментарий
Поделиться на другие сайты

А вот это и есть тот второй случай когда используется boot Loader. Я думаю что если использовать для опытов дома - то лучше акуратно перерезать провода и вывести на ISP MOSI и MISO как положено или сделать переключатель Ну или поискать boot Loader и напрограмировать его.. Хотя ещё он там может уже быть.. Тогда просто посмотреть с какой системой он совместим...

что где перерезать? Куда вывести моси и мисо?

Ссылка на комментарий
Поделиться на другие сайты

Берём и тянем домой даташит на МЕГА 128 и читаем его от корки до корки. В часности дочтёмся на странице 300:

SPI Serial Programming Pin Mapping:

Even though the SPI Programming interface re-uses the SPI I/O module, there is one important

difference: The MOSI/MISO pins that are mapped to PB2 and PB3 in the SPI I/O module are not

used in the Programming interface. Instead, PE0 and PE1 are used for data in SPI Programming

mode as shown in Table 127.

Из чего становится ясно что в вашем случае нужно отрезать MOSI и MISO от разьёма програмирования и пркрутить их проводками на то место где ложны быть (выводы PE0 и PE1). Перед этим проверить если на этих выводах нет какой подключеной переферии... И потом можно будет считать вашу плату универсальной :) Можно ещё попробовать подключить выход уарта который отрезаете на конвертор уровней и сделать вывод для бутлоудера (в будуещем :) ). Дальше берйте любой рабочий програмер для авр и занимаетесь програмированием :)

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • @READART Из практики. Даже 2в1 ухитряются путаться и мешать друг другу. Что за ад будет происходить с 4в1 я с трудом представлю. Вероятнее всего он будет низведен до банального 2в1 из-за неудобства.
    • нечего там смотреть, достаточно взглянуть на картинку- это похоже болячка этой деки- присоединяюсь к теме- у меня такая же проблема!
    • @donec Спасибо, но нет. Слишком всё как то всё сложно и запутано написано там в этом коде.  Я сейчас тем временем продолжаю разбираться с дисплеем. Выяснил причину артефактов на дисплее, а она кроется в коде, но это ещё нужно понять как исправить. Собственно в чём суть дела вывод по одному символу работает корректно и всё отображается правильно, но как только я пытаюсь вывести строку то на дисплее сразу появляются всяческие артефакты. Так что тут получается нужно каким то образом править код вывода строки. Вот весь код написанный под ATMEGA16. #define F_CPU 7372800UL #define BAUND 9600L #define UBRRL_value (F_CPU/(BAUND*16))-1 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdlib.h> #define MAIN_H_ #define LCD_H_ #define LCD_DDR DDRA #define LCD_PORT PORTA #define LCD_PIN PINA #define DATA 0b11110000 #define RS PA2 #define E PA3 #define E1 LCD_PORT|=(1<<E) #define E0 LCD_PORT&=~(1<<E) #define RS1 LCD_PORT|=(1<<RS) #define RS0 LCD_PORT&=~(1<<RS) void lcd_ini(void); void lcd_str(char* str); void lcd_pos(uint8_t line, uint8_t pos); void lcd_num(uint8_t num, uint8_t line, uint8_t pos); uint8_t n=0; void write(uint8_t n) { n<<=4; E1; //линию Е в 1 LCD_PORT&=~DATA; //удалить предыдущую отправку LCD_PORT|=n; //выставить значение на пины управления дата битами asm("nop"); //пропуск такта E0; //линию Е в 0 } void send_byte(uint8_t byte, uint8_t tip) { if (tip) //если тип данные на линии RS 1 { RS1; } else //иначе тип команда и на линии RS 0 { RS0; } write(byte>>4); //передача старшего полубайта write(byte); //передача младшего полубайта } void lcd_ini(void) { LCD_DDR|=DATA | (1<<RS) | (1<<E); _delay_ms(20); RS0; write(3); _delay_ms(5); write(3); _delay_us(150); write(3); _delay_us(50); write(2); _delay_us(50); send_byte(40,0); _delay_us(50); send_byte(12,0); _delay_us(50); send_byte(1,0); _delay_ms(2); send_byte(6,0); _delay_us(50); } void lcd_str(char* str) { uint8_t n=0; while(str[n]) { send_byte(str[n],1); n++; } } void lcd_pos(uint8_t line, uint8_t pos) { uint8_t adress=(line*0x40+pos)|0x80; send_byte(adress,0); _delay_us(50); } void init_pin(void); #define C_PC0 (~PINC&(1<<PC0)) #define C_PC1 (~PINC&(1<<PC1)) #define LED_1_ON() PORTD|=(1<<PD2) #define LED_1_OFF() PORTD&=~(1<<PD2) #define LED_2_ON() PORTD|=(1<<PD3) #define LED_2_OFF() PORTD&=~(1<<PD3) #define FLAG_END_RX (1<<3) #define FLAG_ERR_RX (1<<4) #define BUF_SIZE 20 char rx_buf[BUF_SIZE]; char buf_index = 0; char rxb; volatile start=1, flags; ISR(USART_RXC_vect) { char rxb = UDR; if(!(flags & FLAG_END_RX)) { rx_buf[buf_index]=rxb; if(rx_buf[buf_index] == 0x0D) { flags |= FLAG_END_RX; return; } buf_index++; if(buf_index >= BUF_SIZE) { buf_index = 0; flags |= FLAG_ERR_RX; } } } void init_UART() { UBRRL = UBRRL_value; UBRRH = UBRRL_value>>8; UCSRB|=(1<<TXEN); UCSRB|=(1<<RXEN); UCSRC|=((1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)); UCSRB|=(1<<RXCIE); sei(); flags = 0; } void send_UART(char value) { while(!(UCSRA&(1<<UDRE))); UDR=value; } int main(void) { init_pin(); init_UART(); _delay_ms(500); send_UART('O'); send_UART('K'); send_UART('!'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); flags = 0; DDRB = 0b10000000; PORTB = 0b11111111; lcd_ini(); while(1) { if (~PINB & (1<<1)) { send_UART('P'); send_UART('B'); send_UART('1'); send_UART(0x0D); send_UART(0x0A); _delay_ms(250); lcd_pos(0,0); send_byte('A',1); lcd_pos(1,0); lcd_str("PORT B1"); //lcd_str(" "); //lcd_pos(1,0); //lcd_str(" "); //lcd_pos(1,0); //lcd_str("GAMES AND SOFT"); //send_byte(0b01000001,1); //A //send_byte(0x41,1); //A //send_byte('A',1); //A } if (~PINB & (1<<2)) { send_UART('P'); send_UART('B'); send_UART('2'); send_UART(0x0D); send_UART(0x0A); _delay_ms(250); lcd_pos(0,0); send_byte('B',1); lcd_pos(1,0); lcd_str("PORT B2"); //lcd_pos(0,0); //lcd_str(" "); //lcd_pos(1,0); //lcd_str(" "); //lcd_str("TIFASO"); } if (~PINB & (1<<3)) { send_UART('P'); send_UART('B'); send_UART('3'); send_UART(0x0D); send_UART(0x0A); _delay_ms(250); lcd_pos(0,0); send_byte('C',1); lcd_pos(1,0); lcd_str("PORT B3"); //lcd_str(" "); //lcd_pos(1,0); //lcd_str(" "); //lcd_pos(1,0); //lcd_str("HELLO"); //lcd_pos(1,0); //lcd_str("PLAYER BT201"); } if (~PINB & (1<<4)) { send_UART('P'); send_UART('B'); send_UART('4'); send_UART(0x0D); send_UART(0x0A); _delay_ms(250); lcd_pos(0,0); send_byte('D',1); lcd_pos(1,0); lcd_str("PORT B4"); //lcd_pos(0,0); //lcd_str(" "); //lcd_pos(1,0); //lcd_str(" "); //lcd_str("FILE MUSIC MP3"); //lcd_pos(1,0); //lcd_str("USB PLAYER VOLL"); } char i = 0; if (rx_buf[i] == 'M'){ i++; if (rx_buf[i] == '1') { LED_1_ON(); LED_2_OFF(); } else if (rx_buf[i] == '2') { LED_1_OFF(); LED_2_ON(); } else if (rx_buf[i] == 'T') { LED_1_ON(); LED_2_ON(); } else if (rx_buf[i] == 'K') { LED_1_OFF(); LED_2_OFF(); } } if (C_PC0) { send_UART('P'); send_UART('C'); send_UART('0'); send_UART(0x0D); send_UART(0x0A); _delay_ms(250); lcd_pos(0,0); send_byte('E',1); lcd_pos(1,0); lcd_str("PORT C0"); } if (C_PC1) { send_UART('P'); send_UART('C'); send_UART('1'); send_UART(0x0D); send_UART(0x0A); _delay_ms(250); lcd_pos(0,0); send_byte('F',1); lcd_pos(1,0); lcd_str("PORT C1"); } } } void init_pin(void) { DDRC = 0b00000000; PORTC = 0b11111111; DDRD |= ((1<<2)|(1<<3)); PORTD &=~ ((1<<2)|(1<<3)); } Собственно за вывод символа отвечает send_byte она работает правильно, а за вывод строки отвечает lcd_str вот в ней как раз таки и вся проблема с артефактами. А что конкретно не так я пока ещё никак не пойму. Может кто более опытным глазом увидит и подскажет что нужно исправить.
    • Может, и дроссель. Синие конденсаторы мне тоже встречались.
    • Мне больше нравятся в жёстком корпусе, которые собираются с помощью двух винтов.  Кстати, они тоже отечественные. 
×
×
  • Создать...