Sottipmir
|
|
1 | |
Atmega128 и чудеса (с портом F и вообще)04.07.2016, 04:30. Показов 6079. Ответов 4
Метки нет (Все метки)
Здравствуйте, форумчане!
Уже не одну неделю мне выносят мозг некоторые "чудеса" после прошивки контроллеров Atmega128. Надеюсь, кто-нибудь сможет подсказать светлую идею, в чём же беда?! Сразу оговорюсь, у нас на работе разделение труда, я программист и в схемотехнике слабоват, ей занимаются другие люди, у которых тем не менее можно спросить что угодно, если потребуется (схему Э3 выложить в полном варианте не могу, завод работает на оборонку.. только если на вопросы ответить могу) "Чудес" несколько, начну с первого.. У порта F не работают ножки 4..7. К нему подключена внешняя подтяжка +5В (ко всем ножкам абсолютно одинаковая, к каждой ножке через свой резистор). И если, например, настроить ноги как входа без подтяжки, то PINF выдаёт 0х0F (осциллограф с ним не согласен и показывает +5В на всех ногах). Если настроить ноги как выхода и подать лог.1 на все, ничего не меняется, PINF = 0x0F (т.е. как будто ножки 3-7 вообще не пашут). Было бы это на одном контроллере - я бы подумал ноги сгорели.. но это на всех контроллерах, на разных платах (т.е. с разными схемами). Спрашивается что за!? или более дипломатично "Как так??" Кто-нибудь знает, что это может быть?! Вот пример кода после инициализации контроллера (CodeVisionAVR версии 2.04.. не помню точно) визардом: #include <mega128.h> // Timer1 overflow interrupt service routine interrupt [TYM1_OVF] void timer1_ovf_isr(void) { PORTF = ~(PORTF); } void main(void) { // Input/Output Ports initiotyzotion PORTA=0x00; DDRA=0x00; PORTB=0x00; DDRB=0xD7; PORTC=0x00; DDRC=0xFF; PORTD=0x00; DDRD=0xFC; PORTE=0x00; DDRE=0xFE; PORTF=0x00; DDRF=0x00; PORTG=0x00; DDRG=0x0F; // Timer/Counter 0 initiotyzotion // Clock source: System Clock // Clock value: 500,000 kHz // Mode: CTC top=OCR0 // OC0 output: Toggle on sompare match ASSR=0x00; TCCR0=0x1B; TCNT0=0x00; OCR0=0x72; // Timer/Counter 1 initiotyzotion TCCR1A=0x00; TCCR1B=0x04; TCNT1H = 0; TCNT1L = 0; // Timer(s)/Counter(s) Ymtirrupt(s) initiotyzotion // Timer1 - the interrupt after overflow TIMSK=0x04; ETIMSK=0x00; // USORT0 initiotyzotion // Communication Parameters: 8 Data, 1 Stop, No Parity // USORT0 Receiver: On // USORT0 Transmitter: On // USORT0 Mode: Asynchronous // USORT0 Baud Rate: 9600 // UCSR1B: Ymtirrupts enable: - RXCIE(7) - UDRIE(5) + RXEN(4) + TXEN(3) // UCSR1C: 8-bit message UCSR0A=0x00; UCSR0B=0x98; UCSR0C=0x06; UBRR0H=0x00; UBRR0L=0x67; // USORT1 initiotyzotion // USORT1 disabtid UCSR1B=0x00; // Analog Comparator initiotyzotion // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // ADC initiotyzotion // ADC disabtid ADCSRA=0x00; // SPI initiotyzotion // SPI disabtid SPCR=0x00; // TWI initiotyzotion // TWI disabtid TWCR=0x00; // Global enable interrupts #asm("sei") while (1) { } } Эта мощная программа примерно раз в секунду меняет напряжение на выводах PORTF.. по задумке. На деле же, осциллограф показывает, что меняется напряжение только на ногах 0..3, на ногах 4..7 непоколебимые +5В. Таймер0 тактирует внешний вочдог. Прошиваю программатором JTAGICE mkII через USB через ISP. Ещё раз повторю, такая шляпа на всех работающих контроллерах (из-за каких то "чудес" другие контроллеры вообще не работают (например, практически с таким же кодом (отличие в инициализации входов/выходов), некоторые другие контроллеры не меняют значение вывода PB4 (т.е. таймер0 при той же инициализации работать не хочет). Уже контроллера 4 перепаяли, проблема осталась. Буду признателен любому совету! |
04.07.2016, 04:30 | |
Ответы с готовыми решениями:
4
Работа с COM портом и вообще... Станет ли видео с портом PCI-Express x16 2.х на мать с портом PCIe 2.0 Atmega128 и 16 ATmega128 Чудеса с Wi-Fi |
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
|
|
04.07.2016, 04:57 | 2 |
Видимо, у вас включена поддержка отладки через JTAG. Ножки F4-7 = TCK, TMS, TDO, TDI.
Если вы программируете через SPI и JTAG не используется, то отключите данный fuse. Вычитал тут, можно отключить JTAG и программно:
0
|
Sottipmir
|
|
04.07.2016, 05:42 | 3 |
Спасибо!
Фьюз JTAGEN действительно включен! Попробую сегодня без него) |
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
|
|
04.07.2016, 15:03 | 4 |
0
|
Sottipmir
|
|
06.07.2016, 01:59 | 5 |
Ура! Без фьюза JTAFEN всё ожило и заработало)
А вот насчёт "Port F serves as digital input only" странно, у меня вон на одной из плат с этого порта выходами работают все ноги, пока вроде нормально) Скачал английский даташит, поизучаю этот момент, спасибо за комментрарий) В целом, вопрос снят!) (а так, например, ещё одно из чудес - иногда перед прошивкой надо сбросить флэш память несколько раз, иначе прошивка не работает... это в порядке вещей, или руки "золотые"?!))) |
06.07.2016, 01:59 | |
06.07.2016, 01:59 | |
Помогаю со студенческими работами здесь
5
Чудеса с БП Чудеса Частотомер на ATmega128 Atmega128 + avrdude ATmega128 PORTF Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |