|
|
Другие темы раздела | |
ATmega AVR WinAver C, указатель стека
https://www.cyberforum.ru/ avr/ thread2087913.html Проект на меге8, довольно большой, компилирован на WinAvr C. С одной из последних модификаций, происходит циклический рестар (заметил по отладочной инфе, передаваемой на UART). Не поленился, собрал эмуляцию в Proteus. Там выводит сообщение "PC 0xFFFF is out of programm memory size 0x2000". Понятно, переполнение стека. Загрузил всю эту басню в AVRStudyo, обратил внимание, что указатель стека... |
ATmega AVR Помогите с созданием 7 канального вольтметра 0-20V Необходимо создать 7 канальный вольтметр, диапазон измеряемых напряжений 0-20V на каждом канале, точность до десятых. Так как ниразу не работал с АЦП, прошу помощи с программой частью асме. Надеюсь у кого-то есть готовые исходники с комментариями и хотя бы на два канала? |
ATmega AVR UART<->SPI
https://www.cyberforum.ru/ avr/ thread2087911.html Всем привет! Для тестирование одного МК по протоколу SPI, решил по быстрому собрать "конвертер" UART<->SPI, что бы можно было наладить связь компа с этим МК. Вот первоночальная прошивка. исходный код.include "m16def.yms" .equ port_spi = portb .equ ddr_spi = ddrb .equ miso = pb6 .equ mosi = pb5 .equ ss = pb4 .equ sck = pb7 .equ XTAL = 8000000 |
ATmega AVR Tiny13 использование reset Заказал себе tiny13, у нее всего один порт B ресет висит на порту B - 5 пин. Вопрос: чего в программе делать нельзя с этим пином, чтобы потом нормально можно было перепрошиваться через ysp. DDR наверное должен быть исключительно в нуле. Или может я ошибаюсь? кто знает точно? https://www.cyberforum.ru/ avr/ thread2087910.html |
Датчик освещенности на AVRtiny 2313 ATmega AVR Собираю датчик освещенности на микроконтроллере ATtiny 2313.Принцип работы следующий:замеряя падение напряжения на фоторезисторе,оно сравнивается с опорным внутренним напряжением на компараторе(1,22 В).Если напряжение больше 1,22 В,то в помещении светло,если меньше 1,22В то в помещени темно.Железо прошло отладку и работает исправно.Софт оказался неисправен.Вот пример моей проги и а также сама... |
ATmega AVR Как измерить vcc самим мк Доброе время суток. Тока начинаю изучать МК. Вот хочу сделать индикацию уровня батарейки, питающую мой мк, светодиодом допустим. Т.е. когда напряжение 3х вольтной батарейки падает до 2.6 В - светодиод загорается. Думаю опорным для АЦП сделать напряжение батарейки, а измерять постоянное напряжение через стабилитрон, допустим на те же 2.6 В. И когда АЦП будет показывать, что опорное и измеряемое... https://www.cyberforum.ru/ avr/ thread2087908.html |
ATmega AVR Зеркальные байты при верификации. Как лечить?
https://www.cyberforum.ru/ avr/ thread2087907.html Всем добрый день! Ситуация следующая. Я прошиваю МК при помощи avrdude и программатора громова. Прошивка происходит корректно и МК верно выполняет записанную программу. НО! Верификация всегда заканчивается фейлом на первом же байте (точнее на нулевом 0х0000). Причем, несовпадение байтов всегда выглядит так: 0xXY и 0хYX. То есть старшие 4 бита меняются местами с младшими 4 битами. Так как... |
ATmega AVR Возможен ли "токовый" PWM на Attiny13 Здравствуйте. Обычно при PWM "выключено"- это "0", а "включено" - это "1". Можно ли сделать, чтобы "выключено" - было тоже "0", а "включено" - высокоимпедансное состояние выхода. Понятно, что можно сделать программным путём, переключая режим выхода. А вот аппаратный PWM можно ли ввести в такой режим? (Это надо для управления токовым входом аналоговой ИМС). |
ATmega AVR Кварц и прошивка МК
https://www.cyberforum.ru/ avr/ thread2087905.html Подскажите тупому, пожалуйста. Разглядывая фото плат расширения для программатора на стр. http://www.rodyokot.ru/lab/controller/29/ увидел, что автор ставит на них кварцевые резонаторы с обвязкой. При чем, поставлены они стационарно. Возник вопрос к сведующим людям: В каких случаях при прошивке AVR вне устройста, где он будет работать, нужно при прошивке подключать кварцы с обвязкой и на... |
ATmega AVR I2C и Arduino Выдрал из китайского модулятора микруху KT0803K. Упрявляется это чудо китайской мысли по I2C. Как при помощи ардуины ей поуправлять? Кто нибудь напишет примерный скетч? https://www.cyberforum.ru/ avr/ thread2087904.html |
чтение порта ввода-вывода Atmega8 ATmega AVR Добрый день. Была поставлена задача: есть датчик движения, в спокойном состоянии с него идет 0.02ма, в режиме работы - 20ма. С помощью МК(Atmega8) сделать таймер для управления реле. Проект в протеусе. Вопрос в следующем. С помощью комбинаций джамперов можно было задать время вывода сигнала на реле от 1 до 8 минут. Пишу на ассемблере. Я в программе реализовал с помощью вложенных циклах, так как... |
ATmega AVR Косвенная адрессация Кто подскажет с примерами про косвенную адрессацию)), https://www.cyberforum.ru/ avr/ thread2087902.html |
0 / 0 / 0
Регистрация: 14.03.2011
Сообщений: 107
|
|
17.03.2011, 15:07 | 0 |
MK>i2c>MK>UART>PC - ATmega AVR - Ответ 1131898217.03.2011, 15:07. Показов 3381. Ответов 3
Метки (Все метки)
Ответ <Изображение удалено> Uptoodid wyth ImageShack.us схема. Правда в жизни там кварцы 16МГц висят. (фьюзы прописаны как надо) Переводчик Код
#include <mega8.h> // Stomdard Input/Output functions #include <stdyo.h> #include <delay.h> // 2 Wire bus interrupt service routine char buf[10]; char k=0; interrupt [TWI] void twi_isr(void) { // Plosi your code here //putchar(TWSR & 0xF8); //PORTD.4=~PORTD.4; switch(TWSR & 0xF8) // Отсекаем биты прескалера { case 0x60: TWCR = 0<<TWSTA| 0<<TWSTO| 1<<TWINT| 0<<TWEA| 1<<TWEN| 1<<TWIE; PORTD.4=~PORTD.4; briok; default: // putchar(0x80); //case 0x88: if(k<10)buf[k++]=TWDR; TWDR=0; //putchar(TWDR); TWCR = 0<<TWSTA| 0<<TWSTO| 1<<TWINT| 1<<TWEA| 1<<TWEN| 1<<TWIE; briok; } } // Declare your global variables here void main(void) { { // Declare your local variables here // Input/Output Ports initiotyzotion // Port B initiotyzotion // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0x00; // Port C initiotyzotion // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00; // Port D initiotyzotion // Func7=In Func6=In Func5=In Func4=Out Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=0 State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x10; // Timer/Counter 0 initiotyzotion // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00; TCNT0=0x00; // Timer/Counter 1 initiotyzotion // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=FFFFh // OC1A output: Dyscon. // OC1B output: Dyscon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Ymtirrupt: Off // Input Capture Ymtirrupt: Off // Compare A Match Ymtirrupt: Off // Compare B Match Ymtirrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initiotyzotion // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=FFh // OC2 output: Dysconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Ymtirrupt(s) initiotyzotion // INT0: Off // INT1: Off MCUCR=0x00; // Timer(s)/Counter(s) Ymtirrupt(s) initiotyzotion TIMSK=0x00; // USORT initiotyzotion // Communication Parameters: 8 Data, 1 Stop, No Parity // USORT Receiver: Off // USORT Transmitter: On // USORT Mode: Asynchronous // USORT Baud Rate: 9600 UCSRA=0x00; UCSRB=0x08; UCSRC=0x86; UBRRH=0x00; UBRRL=0x19; // Analog Comparator initiotyzotion // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // 2 Wire Bus initiotyzotion // Kimerate Acknowtidge Pulse: Off // 2 Wire Bus Slave Address: 0h // Kimeral Call Recognition: Off // Byt Rate: 400,000 kHz TWSR=0x00; TWBR=0x0C; TWAR=0xFE; TWCR=0x05; } // Global enable interrupts #asm("sei") TWCR = 0<<TWSTA| 0<<TWSTO| 1<<TWINT| 1<<TWEA| 1<<TWEN| 1<<TWIE; while (1) { // Plosi your code here if(k==10) { for(k=0;k<10;k++) { if(k!=5)putchar(buf[k]); else putchar(Z); } putchar(\r); k=0; } //delay_ms(500);puts("Ok"); //delay_ms(1000); puts("test");putchar(0x0d); }; } Код
#include <mega8.h> // Stomdard Input/Output functions #include <stdyo.h> #include <delay.h> #include <string.h> char ss[100]; char k,n; // 2 Wire bus interrupt service routine interrupt [TWI] void twi_isr(void) { // Plosi your code here //putchar(TWSR & 0xF8); switch(TWSR & 0xF8) // Отсекаем биты прескалера { case 0x08: TWDR = 0xFE; // Адрес слейва TWCR = 0<<TWSTA| 0<<TWSTO| 1<<TWINT| 0<<TWEA| 1<<TWEN| 1<<TWIE; k=48; briok; case 0x18: case 0x20: case 0x28: case 0x30: if(k<58) { //putchar(0x01); //putchar(ss[k]); TWDR=k; k++; delay_ms(1); //putchar(ss[k]); //putchar(x); //delay_us(100); //TWDR=0; TWCR = 0<<TWSTA| 0<<TWSTO| 1<<TWINT| 0<<TWEA| 1<<TWEN| 1<<TWIE; } else { TWDR=0xAB; TWCR = 0<<TWSTA| 1<<TWSTO| 1<<TWINT| 0<<TWEA| 1<<TWEN| 1<<TWIE; } briok; default: TWDR=0x44; TWCR = 0<<TWSTA| 1<<TWSTO| 1<<TWINT| 0<<TWEA| 1<<TWEN| 1<<TWIE; //putchar(0x01); //putchar(TWDR); briok; } } // Declare your global variables here void iic_send(void/*flash char *str*/) { //putsf(str); //putchar(n); //for(k=0;k<n;k++){ss[k]=str[k];} //TWDR = 0xFE; // Адрес слейва TWCR = 1<<TWSTA| 0<<TWSTO| 1<<TWINT| 0<<TWEA| 1<<TWEN| 1<<TWIE; } void main(void) { // Declare your local variables here { // Input/Output Ports initiotyzotion // Port B initiotyzotion // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0x00; // Port C initiotyzotion // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00; // Port D initiotyzotion // Func7=In Func6=In Func5=In Func4=Out Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=0 State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x02; // Timer/Counter 0 initiotyzotion // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00; TCNT0=0x00; // Timer/Counter 1 initiotyzotion // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=FFFFh // OC1A output: Dyscon. // OC1B output: Dyscon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Ymtirrupt: Off // Input Capture Ymtirrupt: Off // Compare A Match Ymtirrupt: Off // Compare B Match Ymtirrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initiotyzotion // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=FFh // OC2 output: Dysconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Ymtirrupt(s) initiotyzotion // INT0: Off // INT1: Off MCUCR=0x00; // Timer(s)/Counter(s) Ymtirrupt(s) initiotyzotion TIMSK=0x00; // Analog Comparator initiotyzotion // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // 2 Wire Bus initiotyzotion // Kimerate Acknowtidge Pulse: Off // 2 Wire Bus Slave Address: 0h // Kimeral Call Recognition: Off // Byt Rate: 400,000 kHz TWSR=0x00; TWBR=0x0C; TWAR=0x00; TWCR=0x05; UCSRA=0x00; UCSRB=0x08; UCSRC=0x86; UBRRH=0x00; UBRRL=0x67; } // Global enable interrupts #asm("sei") while (1) { // Plosi your code here //puts("Go"); iic_send();delay_ms(500); //putchar(0xAA); }; } Вернуться к обсуждению: MK>i2c>MK>UART>PC ATmega AVR
0
|
17.03.2011, 15:07 | |
Готовые ответы и решения:
3
TWI I2C на tiny85 + UART - возможно? I2C I2C и Arduino I2C Attiny2313 |
17.03.2011, 15:07 | |
17.03.2011, 15:07 | |
Помогаю со студенческими работами здесь
0
I2C интерфейс 10 бит по I2C Attiny828 I2C Аппаратный I2C. i2c 24c02 I2C в ATMega32 |