Jump to content

Search the Community

Showing results for tags 'UART'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Вопрос-Ответ. Для начинающих
    • Песочница (Q&A)
    • Дайте схему!
    • Школьникам и студентам
    • Начинающим
    • Паяльник TV
    • Обсуждение материалов с сайта
  • Радиоэлектроника для профессионалов
    • Световые эффекты и LED
    • Роботы и модели на ДУ-управлении
    • Автоматика
    • Самодельные устройства к компьютеру
    • Программное обеспечение
    • Автомобильная электроника
    • Системы охраны и наблюдения. Личная безопасность
    • Питание
    • Электрика
    • Промышленная электроника
    • Ремонт
    • Металлоискатели
    • Измерительная техника
    • Мастерская радиолюбителя
    • Сотовая связь
    • Спутниковое ТВ
    • КВ и УКВ радиосвязь
    • Жучки
    • Телефония и фрикинг
    • Высокое напряжение
    • Идеи и технологии будущего
    • Справочная радиоэлементов
    • Литература
    • Разное
  • Аудио
    • FAQ, Технологии и компоненты
    • Для начинающих
    • Источники звука
    • Предусилители, темброблоки, фильтры
    • Питание аудио аппаратуры
    • Усилители мощности
    • Акустические системы
    • Авто-аудио
    • Ламповая техника
    • Гитарное оборудование
    • Прочее
  • Микроконтроллеры
  • Товары и услуги
  • Разное
  • Переделки's ATX->ЛБП
  • Переделки's разные темы
  • Киловольты юмора's Юмор в youtube

Blogs

There are no results to display.

There are no results to display.

Marker Groups

  • Пользователи форума

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


ICQ


Skype


Интересы


Город


Сфера радиоэлектроники


Оборудование

Found 74 results

  1. Плата Sstm32f4discovery. Использую HAL. Стандартная инициализация не вырезана. Тактирование настраивается так: RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_OscInitTypeDef RCC_OscInitStruct; // Enable Power Control clock __PWR_CLK_ENABLE(); // The voltage scaling allows optimizing the power consumption when the // device is clocked below the maximum system frequency, to update the // voltage scaling value regarding system frequency refer to product // datasheet. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); // Enable HSE Oscillator and activate PLL with HSE as source RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; // This assumes the HSE_VALUE is a multiple of 1MHz. If this is not // your case, you have to recompute these PLL constants. RCC_OscInitStruct.PLL.PLLM = (HSE_VALUE/1000000u); RCC_OscInitStruct.PLL.PLLN = 336; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 7; HAL_RCC_OscConfig(&RCC_OscInitStruct); // Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 // clocks dividers RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5); То есть тактируемтся от 16 MHz HSI, все делители - 1. Сам код передачи/приёма тоже HAL: #include <stm32f4xx_hal.h> UART_HandleTypeDef comp; uint8_t for_send[] = {0}; uint8_t for_receive[] = {1}; void init_led ( void ) { GPIO_InitTypeDef led; __HAL_RCC_GPIOD_CLK_ENABLE( ); led.Mode = GPIO_MODE_OUTPUT_PP; led.Pin = GPIO_PIN_14 | GPIO_PIN_15; led.Speed = GPIO_SPEED_LOW; led.Pull = GPIO_NOPULL; HAL_GPIO_Init( GPIOD, &led ); } void HAL_UART_MspInit ( UART_HandleTypeDef * huart ) { __HAL_RCC_USART1_CLK_ENABLE( ); __HAL_RCC_GPIOB_CLK_ENABLE( ); GPIO_InitTypeDef gpio; gpio.Mode = GPIO_MODE_AF_PP; gpio.Pin = GPIO_PIN_6 | GPIO_PIN_6; gpio.Pull = GPIO_PULLUP; gpio.Alternate = GPIO_AF7_USART1; gpio.Speed = GPIO_SPEED_MEDIUM; HAL_GPIO_Init( GPIOD, &gpio ); HAL_NVIC_EnableIRQ( USART1_IRQn ); } int main ( void ) { comp.Init.BaudRate = 9600; comp.Init.Mode = UART_MODE_TX_RX; comp.Init.HwFlowCtl = UART_HWCONTROL_NONE; comp.Init.WordLength = UART_WORDLENGTH_8B; comp.Init.OverSampling = UART_OVERSAMPLING_16; comp.Init.Parity = UART_PARITY_NONE; comp.Init.StopBits = UART_STOPBITS_1; comp.Instance = USART1; comp.State = 0; HAL_UART_Init( &comp ); __HAL_USART_ENABLE_IT( &comp, UART_IT_TXE ); __HAL_USART_ENABLE_IT( &comp, UART_IT_RXNE ); init_led( ); HAL_GPIO_WritePin( GPIOD, GPIO_PIN_15, SET ); while ( 1 ) { for( volatile int i = 0; i < 100000; i ++ ) { ; } HAL_GPIO_TogglePin( GPIOD, GPIO_PIN_14 ); } } void USART1_IRQHandler( void ) { if ( __HAL_UART_GET_FLAG( &comp, UART_FLAG_TXE ) ) { __HAL_UART_DISABLE_IT( &comp, UART_IT_TXE ); HAL_UART_Transmit( &comp, for_send, 1, 0 ); __HAL_UART_CLEAR_FLAG( &comp, UART_FLAG_TXE ); } if ( __HAL_UART_GET_FLAG( &comp, UART_FLAG_RXNE)) { __HAL_UART_DISABLE_IT( &comp, UART_FLAG_RXNE ); HAL_UART_Receive( &comp, for_receive, 1, 0 ); HAL_GPIO_WritePin( GPIOD, GPIO_PIN_15, RESET ); __HAL_UART_CLEAR_FLAG( &comp, UART_FLAG_RXNE ); } } Всё просто. Включаем передачу, приём. Передаём, в приёмнике забираем информацию и гасим включенный светодиод. ЗАходит в прерывание по TXE отправляет данные (Должны ли мы увидеть изменение регистра DR в отладчике, просто он остаётся пустой) Отослал, вышел из прерывания, начитает мигать светодиодом( просто как индикатор что схема работает). Но приёма не происходит. Все инициализации сверены с user_manual. По всему коду прошёлся с отладчиком, все биты HAL выставляет правильно. PB6 и PB7 просто перемычкой соединены.
  2. Имею проводной сканер штрих кодов Argox AS-8000 rs232, хочу переделать его в беспроводной с помощью модулей HC-05 и HC-06. Если я не ошибаюсь, то достаточно разрезать провод сканера пополам, найти линии Rx и Tx и к ним подпаять модули, которые будут работать в сквозном режиме, передавая по блутуз дальше, то что приходит к ним по линии Tx. Помогите мне пожалуйста, в этом деле новичок я. Сами модули я уже настроил: master-модуль сам соединяется со slave-модулем.
  3. Доброго времени суток. Я скачал проэкт (http://alex-exe.ru/radio/avr/avr-uart/), который работает на Proteus, но не работает в реальности. Использую Terminal, atmega16, PL-2303HX. Подсоединяю RXD (переходник) с TXD (микроконтроллер) и наоборот. Подскажите, что я не так делаю и как правильно надо подсоединять микроконтроллер с компьютером?
  4. Доброго времени суток! Может кто-нибудь объяснить, в чём смысл и преимущества использования специализированных программаторов для STM32 типа ST-Link и клонов, работающих по интерфейсам SWD/JTAG, если записать флеш можно прямо по UART/ISP или быстрее по USB (при его наличии)? Я так понимаю, что программаторы, кроме записи в память, ещё умеют выполнять отладку - и это их единственное отличие. А если отладка не нужна? Вернее, часто ли она используется при написании каких-нибудь маленьких прикладных программ типа реле времени? Я собираюсь развести свою печатную плату для STM32F107, а потом хочется поэкспериментировать с STM32F407ZGT - в них в обоих есть USB интерфейс, они оба есть в списке поддерживаемых USB DFU (согласно AN 3156). Но на форуме я прочитал, что пока все сидят на дискавери, в основном из-за того, что в ней есть встроенный программатор ST-LINK прямо на плате, но почему его наличие так важно и не заменяется возможностью программирования по UART/ISP или по USB? Есть ли какое-либо отличие кроме возможности отладки? Может быть, как и в случае со фьюзами у AVR, у STM32 есть какие-то функции/настройки, которые можно использовать/изменять только программатором ST-LINK? И да, разве скорость программирования по USB будет существенно ниже, чем по тому же JTAG или SWD? Заранее спасибо за ответы! Заранее предупрежу, чот с микроконтроллерами я раньше работал, но вот от ST что-то более-менее делал только на STM32F030...
  5. Вопрос. Почему не выполняется на atmega328 команды? Тестировал в протеусе на частоте 8 мгц (в настройках проекта 20 мгц, но думаю на это не так сильно должно влиять). На микроконтроллере запущен аппаратный таймер - работает нормально. Через юарт (настроен только TXD) всё время шлёт: 011111111101111111110... Но сам код не хочет выполняться: while (1) { delay_ms(0.4); // выполнилось при первом цикле PORTD.6=1; // выполнилось при первом цикле delay_ms(0.4); // выполнилось при первом цикле putchar(PORTC.0+PORTC.1*2); // заморозилось и далее не выполняется, но аппаратный таймер работает, юарт флудит (011111111101111111110...) // функцию putchar нашёл в интернете PORTD.6=0; } PORTD.6 - настроен на выход PORTC.0 и PORTC.1 настроены на вход. Включены подтягивающие резисторы. P.S. Проект сделан в CodeVisionAVR с использованием генератора кода.
  6. Всем добра! Подскажите, если на плате оставить для пошивки 4 провода: 5В, GND, RX, TX можно ли будет отлаживать Atmega48 и прошивать его не как обычно с помощью (SPI)? Опыта прошивки пока нет, но планирую прошивать с помощью avrdude.
  7. Добрый день. Необходимо передать изображение из камеры OV9655 на ПК и отобразить его, Камера имеет выходной формат изображения RGB 565, с камеры считываю с использованием DCMI: uint32_t cameraData = DCMI_ReadData(); И после этого передаю через USART на ПК: USART_SendData(Open_USART, (uint8_t) cameraData>>24); while (USART_GetFlagStatus(Open_USART, USART_FLAG_TC) == RESET) {} USART_SendData(Open_USART, (uint8_t) cameraData>>16); while (USART_GetFlagStatus(Open_USART, USART_FLAG_TC) == RESET) {} USART_SendData(Open_USART, (uint8_t) cameraData>>8); while (USART_GetFlagStatus(Open_USART, USART_FLAG_TC) == RESET) {} USART_SendData(Open_USART, (uint8_t) cameraData); while (USART_GetFlagStatus(Open_USART, USART_FLAG_TC) == RESET) {} На компьютере принимаю через терминал и сохраняю в HEX файл. Скажите как потом его можно открыть? В качестве просмотрщика планирую использовать Java, но теперь вопрос как преобразовать данные с камеры в изображение. Может уже кто-то имел опыт работы с данной камерой? Подскажите, как можно передать изображение с нее на ПК?
  8. Уважаемые форумчане. Собираю комплекс взаимодействия компьютера (ПК) и микроконтроллера ATmega8 (МК). В качестве переходника от ПК использую Преобразователь USB-UART на базе PL2303. Подключил выходы крест-накрест: Выход USB-UART Rx к третьей ножке МК. Выход USB-UART Tx ко второй ножке МК. Скомпилировал и зашил в МК программу (см. текст ниже). Подключил USB-UART к ПК. Запустил программу Terminal.exe, подключился к COM3 Ожидаю, что при посылке определенного символа с терминала загорится нужный светодиод. По факту - никакой реакции. Интересная особенность. Если в этот момент подключу к USB входу ПК программатор BM9010, то символы начинают поступать к МК и на консоли (Terminal.exe) также отображаются. Правда не совсем те символы, что я отправляю, но закономерность наблюдается. ВОПРОС: почему не работает система из двух компонентов (USB-UART) и МК? Почему при подключении программатора BM9010 сигналы проходят? -------------- #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> //макросы вычисления скорости #define BAUD 9600 #define UBRR_VAL F_CPU/16/BAUD-1 void usart_init(unsigned int speed) { // устанавливаем скорость Baud Rate: 9600 UBRRH=(unsigned char)(speed>>8); UBRRL=(unsigned char) speed; UCSRA=0x00; UCSRB|=(1<<TXEN)|(1<<RXEN);// Разрешение работы приемника UCSRB|=(1<<RXCIE);// Разрешение прерываний по приему // Установка формата посылки: 8 бит данных, 1 стоп-бит UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); } char x=0; //выводим принятый байт на порт ISR (USART_RXC_vect) { x=UDR;//читаем значение //if(48<x<57) PORTC^=(1<<(x-49)); //UDR=PORTC; UDR=x; } int main(void) { usart_init(UBRR_VAL);//инициализация модуля sei(); while(1); }
  9. Тестирую скорость порта. Есть МК соединенный через UART-USB CP2102 переходник к компу. МК передает пакеты длиной 64 байта на скорости 115200 со скоростью 100 пакетов в секунду. Комп передает ассинхронно данные 64 байт 100 пакетов / сек. Скорость USB 12 мегабит. Если передает данные только МК, то пакеты приходят с минимальной задержкой. Если включить передачу данных с ПК, то принимаемые ПК пакеты приходят сразу пачкой примерно 3 раза в секунду. Байты и сами пакеты не теряются. Пробовал большие скорости UART, но на склейку пакетов это не влияет. Есть способ сделать так, чтобы пакеты не склеивались друг с другом и приходили с минимальной задержкой? Это такая особенность USB шины или чипа CP2102?
  10. Здравствуйте! За основу проекта взял этот материал, добавил лишь переключатель baud rate. Собрал, установил нужную частоту дискретизации, но прочитать сообщение не удалось, много ошибок. Извиняюсь за качество фото. Что стоит попробовать для устранения ошибок? Код прилагаю. sbit LCD_RS at RB0_bit; sbit LCD_EN at RB3_bit; sbit LCD_D4 at RB4_bit; sbit LCD_D5 at RB5_bit; sbit LCD_D6 at RB6_bit; sbit LCD_D7 at RB7_bit; sbit LCD_RS_Direction at TRISB0_bit; sbit LCD_EN_Direction at TRISB3_bit; sbit LCD_D4_Direction at TRISB4_bit; sbit LCD_D5_Direction at TRISB5_bit; sbit LCD_D6_Direction at TRISB6_bit; sbit LCD_D7_Direction at TRISB7_bit; sbit Btn1 at RA3_bit; char i; unsigned short row=1,col=1; unsigned short rate_idx=0; void main(){ TRISA = 0b00001000; PORTA = 0; CMCON |= 7; // Disable Comparators Lcd_Init(); Delay_ms(100); UART1_Init(2400); // set baud rate Delay_ms(200); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_UNDERLINE_ON); Lcd_Out(1,1,"UART Reader"); Delay_ms(2000); Lcd_Cmd(_LCD_CLEAR); while(1){ if(!Btn1){ Delay_ms(500); Lcd_Cmd(_LCD_CLEAR); Lcd_Out(1,1,"Baud rate: "); rate_idx++; if(rate_idx > 3) rate_idx=0; if(0 == rate_idx){ UART1_Init(1200); Lcd_Out(1,12,"12"); } else if (1 == rate_idx){ UART1_Init(2400); Lcd_Out(1,12,"24"); } else if (2 == rate_idx){ UART1_Init(4800); Lcd_Out(1,12,"48"); } else if (3 == rate_idx){ UART1_Init(9600); Lcd_Out(1,12,"96"); } Lcd_Out(1,14,"00"); Delay_ms(2000); Lcd_Cmd(_LCD_CLEAR); } if(1 == UART1_Data_Ready()){ i=UART1_Read(); if(27 == i){ Lcd_Cmd(_LCD_CLEAR); col=1,row=1; } else if(i > 31 && i < 127) { Lcd_Chr(row,col,i); col++; } } if(17==col && 1==row){ row=2; col=1; } if(2==row && 17==col){ Lcd_Cmd(_LCD_CLEAR); col=1; row=1; } } }
  11. Всем привет, пытаюсь заставить общаться 2 микроконтроллера через UART, программа для atmega8 очень простая: #define BAUD 9600 #define BAUDRATE ((F_CPU)/(BAUD*16UL)-1) #include <avr/io.h> #include <util/delay.h> void uart_init (void) { UBRRH = (BAUDRATE >> 8); UBRRL = BAUDRATE; UCSRB = (1 << TXEN ) | (1 << RXEN); UCSRC = (1 << URSEL) | (1 << USBS) | (1 << UCSZ0) | (1 << UCSZ1); } void uart_transmit (uint8_t data) { while (!( UCSRA & (1 << UDRE))); UDR = data; } int main() { DDRC = 0xff; PORTC = 0x00; DDRB = 0xFF; PORTB = 0x00; DDRD = 0x00; PORTD = 0x00; uart_init(); while(1) { uart_transmit('1'); _delay_ms(100); } return 0; } На STM принимаю через UART2 (порт PA.3) вывожу через USB в терминал, за основу взял вот это: https://github.com/rowol/stm32_discovery_arm_gcc/tree/master/usb_cdc_vcp Принимать данные с клавиатуры принимает (через терминал) и символы распознает хорошо, помигал светодиодом на плате, но когда пытаюсь передать с atmega8 данные на stm32 получаю вместо символов вопросительные знаки... Что с этим делать не знаю, уже что только не пробовал. Пробовал конфигурацию которая автоматически создается как в примере выше, и пробовал сам конфигурировать: RCC_APB2PeriphClockCmd(DISCOVERY_COM_CLK, ENABLE); RCC_AHB1PeriphClockCmd(DISCOVERY_COM_RX_GPIO_CLK, ENABLE); GPIO_InitTypeDef gpio; USART_InitTypeDef usart; GPIO_StructInit(&gpio); gpio.GPIO_Mode = GPIO_Mode_AF; gpio.GPIO_Pin = DISCOVERY_COM_TX_PIN; gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &gpio); gpio.GPIO_Mode = GPIO_Mode_AF; gpio.GPIO_Pin = DISCOVERY_COM_RX_PIN; gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &gpio); GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1); USART_StructInit(&usart); usart.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; usart.USART_BaudRate = 9600; usart.USART_WordLength=USART_WordLength_8b; usart.USART_Parity=USART_Parity_No; usart.USART_StopBits = USART_StopBits_2; usart.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_Init(DISCOVERY_COM, &usart); USART_ITConfig(DISCOVERY_COM, USART_IT_RXNE, ENABLE); USART_Cmd(DISCOVERY_COM, ENABLE); Когда сам конфигурирую вообще ничего не приходит, точнее приходит, но вопросительные знаки не рисуются, но свитодиод мигает, и говорит что данные приходят. Еще один момент, микроконтроллер atmega работает не от кварцевого резонатора, может быть из-за этого?
  12. Приветствую всех. Решил для своих радиолюбительских нужд собрать переходник из этой статьи. В статье прикреплены драйвера для XP, vista, 32-bit семерки. Но у меня 2 компа и на одном из них винда 8.1. На нём устройство не определяется, ну да ладно. На втором ноутбуке вин 7, но 64-bit. Когда вставляю в него переходник - определяет, как RS-232. Я устанавливаю драйвера по инструкции. В диспетчере задач теперь определяется как Virtual Communication Port и подсвечивается желтым восклицательным знаком. Но ни одна терминальная программа его не видит. Как это исправить? Обязательно нужна вин 7 х32?
  13. Vit@lik

    Uart С Max232

    Есть задача спаять устройство, которое принимает и отправляет данные через UART. В приблизительной схеме стоят ATmega8 и MAX232 (через слеш ST232 хотя я видел что схема в них отличается а именно конденсатором одним) 1.Главный вопрос вот в чем. Зашел в интернет-магазин а там вариантов MAX232 около ста с различными индексами после названия, и цена очень отличается.Подскажите какую выбрать в DIP корпусе и планарном с рабочей температурой от -40. 2.А также поделитесь 100% рабочей схеме включения для MAX232, так как в интернете схема включения отличается от схемы с даташита а имено одним конденсатором включают его так же как в схеме ST232 и емкости везде разные бывают электролитические или керамические. еще какая-то ADM232 есть. в общем подскажите какую выбрать микросхему с каким индексом и схему включения. заранее спасибо. ссилка на интернет магазин
  14. Добрый день! Стоит задача с компьютера задавать время отсчета таймера собранного на ATmega и семисегментном индикаторе в режиме онлайн. То есть организовать связь для обмена данными с микроконтроллером ATmega. Желательно используя USB дабы не искать компьютер с COM-портом. Подскажите, какой из интерфейсов выбрать исходя из стоимости компонентов и сложности самого решения?
  15. Хочу реализовать передачу данных по блютуху. Возник такой вопрос: Как правильно подключать модуль блютух (HC-05) к МК (PIC16F628A)? У мк есть аппаратный UART. Данные от модуля, как я понял, тоже передаются по UART. Подключать надо так: RX(МК (7 нога)) - RX (Модуль (2 нога)) TX(МК (8 нога)) - TX (Модуль (1 нога)) или как на этой схеме: только вместо DB9 FEMALE подвести к RX и TX соответственно модуль. И если есть у кого-нибудь пример, поделитесь пожалуйста ) Сильно не пинайте я только начинаю.
  16. Добрый день ребят! Помогите пожалуйста с реализацией кода на Attimy2313A с UART Написал вот такой кодик по примерам: #define F_CPU 8000000UL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <stdio.h> #include <stdlib.h> //макросы вычисления скорости #define BAUD 19200 #define UBRR_VAL F_CPU/8/BAUD-1 void usart_init(unsigned int speed) { // устанавливаем скорость Baud Rate: 9600 UBRRH=(char)(speed>>8); UBRRL=(char) speed; UCSRA=0x00; UCSRB|=(1<<RXEN);// Разрешение работы приемника UCSRB|=(1<<TXEN); //Разрешение работы передатчика UCSRB|=(1<<RXCIE);// Разрешение прерываний по приему // Установка формата посылки: 8 бит данных, 1 стоп-бит UCSRC=(1<<UCSZ1)|(1<<UCSZ0); } //выводим принятый байт на порт ISR(USART0_RX_vect) { PORTB=UDR; _delay_ms(100); UDR = PORTB; // "ЭХО" } int main(void) { usart_init(UBRR_VAL);//инициализация модуля sei(); DDRB= 0b11111111; //вывод на все пины порта B while(1); { } Цель текущего кода: принять и отправить по прерыванию. Пробовал тестить в протеусе, что то неочень получается. данные приходят но криво. Приколы с таблицой ASCII я уже просек, поэтому пробовал отправлять с зажатым альтом цифры. Результат неутешил. Конечный код должен принимать подряд 2 байта, где 1- содержит ИД устройства , если BlockID == 1 байту (где BlockID - const), то второй байт кидаем на PORTB Главный вопрос, работает ли мой код и как принимать подряд 2 байта в одном прерывании?? Пишу в Atmel Studio 7 Баудрэйт 19200 бод Частота мк 8МГц
  17. Работаю в AvrStudio 5. Есть две проблемы: не прописывается биты в UCSRC а также не реагирует на запись данных UDR. Возможно проблем в студии, но как по мне 5-я одна из работоспособных. UartInit: ldi r16, low(bauddivider) out ubrrl, r16 ldi r16, high(bauddivider) out ubrrh, r16 ldi r16, (1<<RXEN)|(1<<TXEN) out UCSRB,r16 ldi r16, (1<<URSEL)|(1<<USBS)|(3<<UCSZ0) out UCSRC,r16 ldi r16, 0xa out udr, r16 ret
  18. Управление нагрузками с помощью AVR - микроконтроллера через UART-RS232... Здравствуйте уважаемые,есть просьба! Может у кого есть или может у вас получится поделиться инфой где можно скачать предварительный исходник под C или CVAVR проект.Не могу найти информации,а точнее видео о том как все хвастаются полно а вот проблемка в том что я не могу разобраться в том как сделать рвспознование...Провозился дней 5,слышит но слова не до путя распознает,то не то выполнит. Может ссылкой поделитесь на то как можно реализовать распознавание речи на AVR!!! Я тут полумал,может есть исходник (так я думаю проще будет - хоть языковые пакеты есть) реализовать обработку речи на компе,ее в свою очередь передавать по каналу UART на МК и он в свою очередь выполняет заданную команду... Помогите кто чем может,подкиньте идеи , мыслишки и желательно(буду очень благодарен) если будут примеры,а еще лучше какие не какие исходники на С или CVAVR проекте... Готовые устройства типо (VRBot или Z-Control) не предлагать хочу сам и вообще они не подходят под мои нужды...
  19. Пытаюсь завести UART на сабжевом микроконтроллере. В принципе таки все есть, но UART упорно молчит при передаче и не выходит на прерывание при приеме. Чутье подсказывает, что я просто напросто не так подал тактирование на модуль USART, но уже раз 10 все перепроверил. Все именно так. Вот код: #include "iostm8l152c6.h" int main ( void ) { PC_DDR_bit.DDR3 = 1; PC_CR1_bit.C13 = 1; PC_CR2_bit.C23 = 0; PC_DDR_bit.DDR2 = 0; PC_CR1_bit.C12 = 1; PC_CR2_bit.C22 = 1; //UART init CLK_PCKENR1_bit.PCKEN15 = 1; USART1_CR1 = 0; USART1_CR3 = 0; USART1_CR4 = 0; USART1_CR5 = 0; USART1_BRR2 = 0x03; USART1_BRR1 = 0x68; USART1_CR2_bit.RIEN = 1; USART1_CR2_bit.REN = 1; USART1_CR2_bit.TEN = 1; asm("RIM"); while (1) { //Loop while(!(USART1_SR_bit.TC)); USART1_DR = '!'; } return 0; } #pragma vector=USART_R_OR_vector __interrupt void USART_RXNE(void) { while(!(USART1_SR_bit.TC)); USART1_DR = '?'; } По поводу железа... Передачу (TX со стороны STM) я жду на лапе PC3, а прием (RX) на PC2
  20. Понадобился USB/UART шнурок. Нашел какой-то старый кабель для самсунга, которому лет десять точно. Подключил к ПК - винда (Win7 x64) увидела USB-устройство, но не определила и дрова не поставила. Разобрал - внутри стоит чип PL2303HX. С офсайта prolific скачал последние дрова на него - не помогло, видимо чип левый, а они в последних версиях залочили установку дров для чипов с левыми айдишниками. Погуглил, выяснил что нужно старые дрова ставить - поставил пару старых версий - не помогло. На каком-то форуме вычитал что нужно вручную скопировать файлы дров в папку винды /drivers/ - скопировал тоже не помогло. Просидел часа два, хоть убей, но винда ни в какую не хочет ставить для них драйвер. Принудительно указываю папку с драйвером, но пишет, что мол совместимых драйверов для данного устройства не обнаружено. Может есть еще какие-то хитрости в плане драйверов для этих чипов PL2303? Кто сталкивался?
  21. Суть проблемы такова что угробил свой роутер и теперь хочу залить на него исправленную прошивку через UART распаянный на его плате. Но переходник валяется где то в барахле который ни как не разберу после переезда. Зато под рукой есть STM32F4DISCOVERY, ну и подумалось что можно было бы из неё организовать такой переходник. Только что то готового проекта не найду. Может тыкните ? Вот нашел кажется, буду дома проверю, знал же что всё просто А если проще будет сделать на Arduino due то он у меня тоже под рукой. Нашел вечером буду пробовать.
  22. Задачей этого устройства(1)(на Atmega128) является отправка команд другому устройству(2), после чего устройство(2) которое получило команду, должно отправить инфо о состоянии. После получения данных, устройство(1) зацикливается вот в этой части кода. void USART_Reciev_2(void) //получаем ответ { unsigned short int i,save,sre; //<<<---------- настраиваем таймер Т1 ---------------- TCCR1B |= (1<<CS12);//выбираем источник тактового сигнала (ск/256) TIMSK|=(1<<TOIE1); // разрешение прерывания по переполнению Т1 // TCNT1=0x10000-(F_CPU/256); //записываем в счётный регистр таймера значение // от которого будет идти отсчёт //------------------------------------------>>>>>>>>>> timer_count=0; nn=0; sr=SREG; //нужно запомнить состояние регистра SREG до входа на прерывание sei(); //разрешаем прерывания if (w==2) // если посылаем единоразово команду Q1 { if ((P01[e]=='1')&&(P01[e-1]=='Q')) { // timer_count=0; save=adr; //сохраняем значение переменной adr; sre=SREG; //сохраняем значение регистра SREG sei(); //разрешаем прерывания while(timer_count<=3); // ждем 3 секунды и запрещаем (за это время проходитпроверка и есть ответ) cli(); SREG=sre; adr=save; if ((otvet_RPU[A-1]==0x20)||(otvet_RPU[A-1]==0x00)) no_answer_po1=1; //ответа не было else no_answer_po1=0; //был ответ } else _delay_ms(400); } else { if ((transmit_comand[e]=='1')&&(transmit_comand[e-1]=='Q')) { timer_count=0; save=adr; //сохраняем значение переменной adr; sre=SREG; //сохраняем значение регистра SREG sei(); //разрешаем прерывания while(timer_count<=3); // ждем 3 секунды и запрещаем (за это время проходитпроверка и есть ответ) cli(); SREG=sre; adr=save; } else _delay_ms(400); } if (w==4) //если работаем с четвертым пунктом (Технологическая тренировка) { if ((texnoltrenir[e]=='1')&&(texnoltrenir[e-1]=='Q')) { // timer_count=0; save=adr; //сохраняем значение переменной adr; sre=SREG; //сохраняем значение регистра SREG sei(); //разрешаем прерывания while(timer_count<=3); // ждем 3 секунды и запрещаем (за это время проходитпроверка и есть ответ) cli(); SREG=sre; adr=save; } else _delay_ms(400); } cli(); //запрещаем прерываия SREG=sr; //востанавливаем значение регистра SREG }
  23. Имеется последовательный поток данных, не важно: UART, SPI, I2C и т.д. К примеру такая посылка: стартовый бит (начало данных), данные неизвестной длины, стоповый бит (2 шт - конец данных). Конкретней так у меня: 0xDD, данные, 0x00, 0x00. Как наиболее правильно и изящно выцепить требуемые данные и сохранить их в переменную для последующих манипуляций? Есть свое решение, но оно настолкьо костыльное что не хочется показывать этот индусокод. Там куча условий, лишних флагов и т.д. Т.е. получаю данные: if (Serial.available()) { recB = Serial.read(); .... .... } И далее? Пните в общем в нужном направлении.
  24. День добрый. Я имел малый опыт написания программы на С++ под малиной. До этого момента мои проекты я писал в редакторе "nano" и компилировал с помощью gcc. Но теперь передо мной стоит задача написать достаточно большую и сложную программу. И мне необходима IDE для разработки и отладки кода. Я решил поставить себе на рабочий компьютер Visual studio 2010, нашел замечательный вариант сопряжения рабочего компьютера и малины http://visualgdb.com/tutorials/raspberry/ . Я смог запустить приложение, написанное на рабочей машине, на малине. И даже проводить отладку. Но я пока нашел только как скомпилировать и запустить простой Сишный файл. Для реализации моих задач мне необходимо использовать UART. И ранее, компилируя и запуская код непосредственно на малине, я делал следующее: 1-Редактировал сам код Си: nano uart1.c 2-Компилировал файл: gcc -o uart1 -l rt uart1.c 3-Запускал проект, с использованием UART : ./uart1 /dev/ttyAMA0 Собственно вопрос который у меня и вызвал затруднения: Как мне запустить мой проект в VS, что-бы он корректно работал на малине, и я мог его отлаживать. Или может есть какие-то IDE которые я могу установить непосредственно на Малине?
×
×
  • Create New...