Vetal-Soft
Участник-
Постов
59 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о Vetal-Soft
-
Звание
Участник
Контакты
-
ICQ
Array
-
Может, применить фототранзистор.
-
mega16+hd44780
Vetal-Soft ответил Lyt тема в MCS51, AVR, PIC, STM8, 8bit
КО: Надо сначала переключить порт микроконтроллера подключенный к DB0...DB7 как вход, а потом выставлять сигнал RW. -
Нужен учитель
Vetal-Soft ответил David_Ali тема в Образование в области электроники
Для обмена по UART правильнее использовать FIFO буфер. Вот пример под AVR Studio: /* Файл main.c */ //#define F_CPU 16000000UL #include <avr/io.h> #include <stdio.h> // стандартная библиотека ввода/вывод #include <avr/pgmspace.h> // утилиты пространства программ #include "uart.h" // Создаем поток для ввода/вывода на/с UART для использования стандартных // функции ввод/вывода FILE uart_file = FDEV_SETUP_STREAM(uart_put, uart_get, _FDEV_SETUP_RW); int main (void) { uart_init(); // название Ф-ции говорит само за себя stdout = stdin = &uart_file; // теперь стандартные потоки ссылаются на наш поток char str[50]; printf_P(PSTR("Hello, World!\n\r")); printf_P(PSTR("Input string:")); scanf_P(PSTR("%49s"),&str); printf_P(PSTR("%s\n\r"),str); fprintf(&uart_file, "Bye-bye\n\r"); // Так можно выбирать с каким именно // потоком работать (для примера) while (1); return 0; } /* file "uart.h" */ #ifndef UART #define UART #include <stdio.h> #include <avr/io.h> #include <avr/interrupt.h> #define UART_FIFO_SIZE 64 // Размер FIFO #define UART_BAUD 9600 // Скороть UART void uart_init(void); int uart_get (FILE *stream); uint8_t uart_test (void); int uart_put (char d, FILE *stream); #endif /* end UART */ /* file "uart.c" */ #include "uart.h" typedef struct { // Структура для FIFO uint8_t idx_w; // Указатель на конец очереди FIFO uint8_t idx_r; // Указатель на начало очереди FIFO uint8_t count; // Счетчик количества данных в FIFO uint8_t buff[uART_FIFO_SIZE]; // Сам FIFO } FIFO; static volatile FIFO txfifo, rxfifo; /* Initialize UART */ void uart_init() { rxfifo.idx_r = 0; rxfifo.idx_w = 0; rxfifo.count = 0; txfifo.idx_r = 0; txfifo.idx_w = 0; txfifo.count = 0; UBRRL = (F_CPU / (16UL * UART_BAUD)) - 1; // Настраиваем скорость работы UART UCSRB = _BV(RXEN)|_BV(RXCIE)|_BV(TXEN); // Включаем: прием, вызов прерывания по приему, передачу } uint8_t uart_test (void) { return rxfifo.count; } int uart_get (FILE *stream) // Ф-ция чтения FIFO для приемника { char d; uint8_t i; i = rxfifo.idx_r; while(rxfifo.count == 0); // Ожидание входящих данных d = rxfifo.buff[i++]; cli(); rxfifo.count--; sei(); if(i >= UART_FIFO_SIZE) i = 0; rxfifo.idx_r = i; uart_put(d,stream); // Эхо ответ return d; } int uart_put (char d, FILE *stream) // Ф-ция записи в FIFO для передатчика { uint8_t i; i = txfifo.idx_w; while(txfifo.count >= UART_FIFO_SIZE); // ждем когда освободится место в FIFO txfifo.buff[i++] = d; cli(); txfifo.count++; UCSRB |= _BV(UDRIE); // Включаем вызов прерывания по освобождению буфера передатчика sei(); if(i >= UART_FIFO_SIZE) i = 0; txfifo.idx_w = i; return 0; } ISR(USART_RXC_vect) // Прерывание по приему { uint8_t d, n, i; d = UDR; n = rxfifo.count; if(n < UART_FIFO_SIZE) // Если FIFO заполнен данные начнут теряться { rxfifo.count = ++n; i = rxfifo.idx_w; rxfifo.buff[i++] = d; if(i >= UART_FIFO_SIZE) i = 0; rxfifo.idx_w = i; } } ISR(USART_UDRE_vect) // Прерывание по освобождению буфера передатчика { uint8_t n, i; n = txfifo.count; if(n) { txfifo.count = --n; i = txfifo.idx_r; UDR = txfifo.buff[i++]; if(i >= UART_FIFO_SIZE) i = 0; txfifo.idx_r = i; } if(n == 0) // если FIFO пуст, UCSRB &= ~_BV(UDRIE); // то выключаем вызов прерывания по освобождению буфера передатчика } -
if ((0xffff-sumADC) < temp16) { . . .
-
запустим GUI emWin вместе?
Vetal-Soft ответил Dunduk тема в ARM, 32bit
Да, думаю хелпа и примеров должно хватить. После праздников буду этим заниматся. -
запустим GUI emWin вместе?
Vetal-Soft ответил Dunduk тема в ARM, 32bit
В Keil MDK-ARM 4.60 встроена emWin. -
Операционный усилитель
Vetal-Soft ответил SergeyVas тема в В помощь начинающему
Полоса пропускания - это синусойда Скороть наростания - это скорость наростания синусойды частота которой лежит на границах пололсы пропускания Популярно както так))) Это не популярно, это безграмотно. -
AVR Studio 6 C++
Vetal-Soft ответил Vetal-Soft тема в Программирование
Спасибо. Все встало на свои места)) Это моя первая программа на С++. С конструкторами и деструкторами более менее понятно. Буду плавно разбираться по мере изучения. -
AVR Studio 6 C++
Vetal-Soft ответил Vetal-Soft тема в Программирование
Т.е. нельзя сначала объявить класс, а потом описать его? (как функцию в Си) ps. Еще хотел бы узнать как правильно вынести класс в отдельный файл. -
AVR Studio 6 C++
Vetal-Soft опубликовал тема в Программирование
Начал изучать С++. И сразу затык. Что я делаю не так? #include <avr/io.h> class StepMotor; int main(void) { StepMotor a; while(1) { a.initSpeed(20); a.initStep(20.0); } } class StepMotor { float Step; int Speed; public: void initStep (float step) { Step = step; } void initSpeed (int speed) { Speed = speed; } }; Не компилируется. Ошибка: aggregate 'StepMotor a' has incomplete type and cannot be defined #include <avr/io.h> class StepMotor { float Step; int Speed; public: void initStep (float step) { Step = step; } void initSpeed (int speed) { Speed = speed; } }; int main(void) { StepMotor a; while(1) { a.initSpeed(20); a.initStep(20.0); } } А так все нормально. Так же не понятно как правильно организовать проект состоящий из нескольких файлов. -
Распиновка линейного стабилизатора
Vetal-Soft ответил Motion тема в В помощь начинающему
корпус TO-3 -
MP3 player c внешним управлением от МК
Vetal-Soft ответил iiv тема в В помощь начинающему
Вот готовое Simple SD Audio Player with an 8-pin IC -
Не выходит одолеть прерывания в Bootloader'е
Vetal-Soft ответил Sirko тема в AVR
У Вас в makefile: #/* Select Boot Size in Words (select one, comment out the others) */ ## NO! BOOTSIZE=128 ## NO! BOOTSIZE=256 ## BOOTSIZE=512 ## BOOTSIZE=1024 BOOTSIZE=2048 ## BOOTSIZE=4096 2 кБайта, а в программаторе 2 кСлова -
Не выходит одолеть прерывания в Bootloader'е
Vetal-Soft ответил Sirko тема в AVR
Скорее всего заморочка с измерением памяти программ: В GCC - байты, у Atmel - слова. Настройте фъюзы на 2k. -
Усилитель мощности
Vetal-Soft ответил дерзкий_эмо тема в Схемотехника
))) А при спаде надо будет деть куда то 1000 Ватт (Киловатт(В*А))