Где косяк!!!!!!
Написал RDT дата Суб, 12/25/2010 - 14:01
Есть микроконтроллер - ATtiny2313! Не получается работа с прерыванием по UART. Само прерывание вызывается, но вот в UDR ничего не записывается. Может что-нибудь упустил. Впрочем, ниже преведен код.
#include <avr/io.h> #include <avr/eeprom.h> #include <stdio.h> #include <stdlib.h> #include <avr/interrupt.h> ISR(USART_RX_vect) { int temp; temp=UDR; PORTB=temp; } int main(void) { DDRB=0xFF; PORTB=0x00; DDRA=0xFF; PORTA=0x00; GIMSK=0b00000000; MCUCR=0b00000000; UCSRA=0x00; UCSRB=0x90; UCSRC=0x06; UBRRH=0x00; UBRRL=0x34; sei(); for(;;) {} }
»
Я очень рекомендую, и для
Я очень рекомендую, и для начинающих и для уже бывалых каждую строку читать и комментировать.
Реально как только начнешь комментировать строки, что в них конкретно происходит, сразу же на много много много проблем станет меньше. Так же будет полезно для того, чтобы сторонние люди могли помочь и быстро прочитать и разобрать код.
В заготовках и шаблонах глянь для ATmega8 программу работы по прерыванию. Обработчик подойдет без изменений, только измени код инициализации USART для attiny2313.
Попробуй не int
Попробуй не int temp;
а
unsigned char temp;
Регистр UDR 8-битний все-таки.
Спасибо за столь скорый
Спасибо за столь скорый ответ!:) Идея проста как грабли. Принять по UART некие данные, записать их в EEPROM. По нажатию кнопки (посажена на ножки прерывания). Все, что было записано отсылается обратно. Смысл? А никакого:) Просто хочется поучиться-попрактиковаться.
Разобрался, почему криво работало прерывание. До конца, правда не понял. Записал регистр предделителя - CLKPR=0x80; CLKPR=0x00; Эти значени я получил из Codevision (я новичок, сначала его пробовал, сейчас пробую WinAVR). В нем есть мастер начального кода. Этим мне он и понравился. Вот оттуда я и дернул часть кода. После этих действий я получил желаемое! Прерывание стало вызываться!!! На матрице 8x8 отображалось значение, посылаемое с компа. Почему после манипуляций с предделителем все заработало - вопрос. Скажу только, что работает у меня контроллер от внутреннего генератора (внешнего кварца нет).
Но, увы и ах! Перестала происходить запись в EEPROM. Вчера пробовал отдельную работу функций из даташита - было все здорово, все зашилось с пол пинка! А сегодня не работает. Вообще никак! Даже сами функции перестали фурычать! Бред какой-то!
Если будут какие предложения по вопросам записи и увеличения адреса ячейки памяти - с радостью прочитаю!
Еще хотелось узнать про Makefale. Почему-то не запускались проекты в AVRStudio! В папке с WinAVR имеется какая-то утилитка по генерации Makefale. Сгенерил свой Makefale - программки писаться стали. Хотелось узнать больше работу связки AVRStudio-WinAVR. Это действует по принципу установил - начал работать? Или нужно что-то настраивать, генерить Makefale и т.п. и т.д? И где удобнее писать и есть ли разница: в AVRStudio или в WinAVR, а потом переносить в AVRStudio?
Ой, что-то много за раз!:)
По поводу работы AVR Studio
По поводу кода хочу сказать что ничего постыдного нету в том чтобы брать код из даташита или у другого автора с другого сайта. Это наоборот хорошо, так как код постоянно дорабатывается, получает гибкость интеграции с другими требовании к выполняемым функциям и задачам.
По поводу работы AVR Studio совместно с Win AVR могу сказать что эти две программы ставятся в последовательности:
1. AVR Studio
2. Win AVR
Просто ставятся и сразу же без никаких настроек или колупаний запускается и работает!
Единственный момент, который надо учесть это путь установки Win AVR и папок проектов. Обязательно путь должен состоять ТОЛЬКО из латиницы(английские буквы алфавита)!
А вот с этим совсем беда!
А вот с этим совсем беда! Имею ввиду последовательность установки! Кто как говорит!:) Как говорится: на вкус и цвет... - все фломастеры разные:) Вот товарищ DIHALT утверждает easyelectronics.ru/avr-studio-likbez.html (и не только он kazus.ru/forums/showthread.php?t=17149), что нужно ставить в обратной последовательности: сначала Win AVR, а потом AVR Studio. Типо будет все в шоколаде:) Вот только у меня что-то как-то кривовато работает! Скачаю с вашего сайта обе проги и установлю в вами указанной последовательности! Авось заработает без шипов!
Смотри, почему я помню именно
Смотри, почему я помню именно что сначала AVR Studio а потом Win AVR, потому что я когда то был установил AVR Studio открыл и решил проект сделать. Но только начал делать новый проект как увидел что могу выбрать только на ассемблере проект. Соответственно установил в срочном порядке Win AVR и появился пункт "AVR GCC".
На данный момент все работает, полет нормальный.
Если правильно - то сперва
Если правильно - то сперва winavr потом studio. Я делал и так и сяк на winxp, работало в обоих случаях. Может логи установки посмотреть, что-то криво может становиться.
Действительно, похоже,
Действительно, похоже, разницы в последовательности установки нет! Внимательнее нужно быть просто! Установливал я проги в отдельную директорию, с ПРЕДЕЛЬНО ПРОСТЫМ НАЗВАНИЕМ БЕЗ ИСПОЛЬЗОВАНИЯ КИРИЛЛИЦЫ В НАЗВАНИИ. Вроде все ок! А вот проект создавал на РАБОЧЕМ СТОЛЕ!:):):) Ржач! Естественно и вплыли непонятки! Потом все заводилось криво, нужно было делать свой Makefail. А сейчас все летает и сразу запускается и компилится, короче радует просто. Думал, кириллицы касается установка программ, но нет: проекты нужно создавать ближе к директории, где установлены проги AVRStudio и WinAVR, не используя кириллицу.
Всем спасибо!