Вернемся к нашим попугаям ))) Принято решение собрать на Atmega8 с железным USART работа по прерыванию по INT1 (модераторам прошу перенести тему в соответствующий раздел)
Project : Version : Date : 19.10.2015 Author : Company : Comments:
Chip type : ATmega8A Program type : Application AVR Core Clock frequency: 8,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *******************************************************/
#include <mega8.h>
// Declare your global variables here
// External Interrupt 1 service routine interrupt [EXT_INT1] void ext_int1_isr(void) { USART_Transmit( unsigned char data ) }
// Standard Input/Output functions #include <stdio.h>
void USART_Transmit( unsigned char data ); void USART_Init( unsigned int ubrr);
void main(void) { // Declare your local variables here
// Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); SFIOR=(0<<ACME);
Многоуважаемый vladlen-from-vrtp поделился вариантом на PIC12F629 как раз то что мне нужно, но перечитав весь даташит на этот контроллер так и не нашел регистр отвечающий за настройку нужной мне тактовой частоты (SCLK) прошу помощи как мне допилить данный код чтобы можно было выставлять частоту, или ткните носом где это в коде
Код:
// PIC12F629 Configuration Bit Settings
// 'C' source line config statements
#include <xc.h> #include <stdint.h>
// #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF.
// CONFIG #pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled) #pragma config PWRTE = OFF // Power-Up Timer Enable bit (PWRT disabled) #pragma config MCLRE = OFF // GP3/MCLR pin function select (GP3/MCLR pin function is MCLR) #pragma config BOREN = ON // Brown-out Detect Enable bit (BOD enabled) #pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled) #pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) //======== #define _XTAL_FREQ 4000000L
У этого МК внутренний осциллятор может работать только на 4МГц. У более поздних можно настройкой OSCCON выбрать другие частоты (8МГц, 4МГц, 2МГц и т.д. до 31КГц ). Для 675-го внутренний осциллятор можно лишь настроить поточнее, используя калибровочную константу. В XC8 для этого есть макрос:
Код:
... OSCCAL = _READ_OSCCAL_DATA(); ...
Но эта константа должна быть в последней ячейке памяти МК в виде retlw 0xXX. Нормальные программаторы её сохраняют, PicKit ещё и восстанавливает потёртую, это нужно учесть. Попытка использовать константу при её отсутствии, вызовет зависание МК по понятным причинам.
После долгих изучений, анализа и прочего, в голове сложилась картина что это вовсе не UART а SPI, вот только передача идет не по битно 8n1 а единым целым 128bit апаратно это реализовать нереально, вопрос как программно это можно реализовать. Гугл да и все остальные форумы выдают только программную реализацию SPI на 8 максимум 16bit
Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России.
На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.
а единым целым 128bit апаратно это реализовать нереально, вопрос как программно это можно реализовать.
Не вижу никаких препятствий к аппаратной реализации "единых целых 128 бит". SPI - это просто сдвиговый регистр и переданные подряд 16 байт дадут искомые 128 бит. Все равно начало и конец пакета по SPI определит синхронизирующий CS.
Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO
подробнее>>
Frosty85
Заголовок сообщения: Re: Освоение USART, совсем запутался, помогите.
Да согласен, но судя по анализу сигнала при вашем варианте аппаратного SPI между байтами передаваемой информации будет другой временной интервал (если судить по шине SCK) там идет тактовый импульс на 8 бит потом временная задержка и снова тактовый импульс на 8 бит)
А в моем случае этой временной задержки недолжно быть, т.е. последовательная передача всех 136 бит
В Вашем случае ясно видно непонимание происходящего. Вы абсолютно не представляете о чем говорите, на мой взгляд, почему я и не стал дальше Вам помогать.
А в моем случае этой временной задержки недолжно быть, т.е. последовательная передача всех 136 бит
Херню не надо городить. Совершенно безразлично какая временная задержка между байтами и даже между битами. защелкивание в сдвиговом регистре приемника происходит по фронту тактирующего импульса и главное, чтобы значение бита совпадало с ЭТИМ ФРОНТОМ. Можно даже тактирующие клоки модулировать по частоте совершенно произвольно. Временные задержки НЕ ОПРЕДЕЛЯЮТ ГРАНИЦЫ БАЙТ.
А в моем случае нужно сделать вот такой вариант SPI
Вложение:
Комментарий к файлу: Нестандартный SPI log.jpg [152.44 KiB]
Скачиваний: 264
первый канал - данные в виде 136 бит второй канал - SCK третий канал - входной сигнал на разрешение передачи данных (не путать с SS)
Как видно из картинок, в сандартном SPI есть промежуток между байтами это видно по SCK А в моем случае его нет и идет все единой цепочкой, плюс ко всему в стандартном SPI тактовая частота SCK начинает выдаваться как только придет управляющая команда с SS (сброс в логический 0 ), а в моем случае этот тактовый сигнал начинает генерироваться с момента подачи питания на МК и относительно него уже формируется выходные данные.
Как вариант исполнения, на той же самой Atmega8 управляющий сигнал привязать к внешнему прерыванию INT1 или INT0, тактовую частоту задать с любого выхода к примеру pd6 ну а вывод данных реализовать на таймере T1
Это только мое предположение. не пинайте и не ругайте, я только учусь.
И в целом это очень похоже на RFID-эмулятор, только разница в том что тактовый сигнал не приходит в МК, а наоборот им же и формируется и относительно него выдает данные.
Вы плохо понимаете о чем Вам говорят. Ну то есть вообще не понимаете. Клоки в синхронном интерфейсе потому и называются клоками, что они ЖИЗНЬ. Жизнь и внутреннее время интерфейса. Если клоки нелинейны в реальном времени, то сам интерфейс ничего об этом не знает. Для него время всегда линейно, а пробелы между группами клоков - анабиоз. Как и для контроллера, кстати. Можно остановить клоки и он впадет в спячку, продолжить - и он не заметит украденного у него времени. И дело тут не в том как назвать интерфейс, а В ПРИНЦИПЕ ЕГО СИНХРОННОСТИ. Нижний сигнал задает начало отсчета 136 бит. И далее число бит равно числу КЛОКОВ. Хоть бы даже последний придет через год, а предпоследний через 20 миллисекунд. Кроме того, пауза между клоками отдельных байт в SPI определяется построением программы. То есть если грузить выходной буфер SPI немедленно как он освободится (в прерывании), то и зазор будет определяться соотношением частоты SPI и машинным циклом МК. При соотношении 1:10 разглядеть зазор на диаграмме будет невозможно. А если соотношение 1:2, то сформировать 8-битным контроллером вывод без зазоров ПРИНЦИПИАЛЬНО НЕВОЗМОЖНО, поскольку он 8-битный и требуется загрузка каждого байта.
Заголовок сообщения: Re: Освоение USART, совсем запутался, помогите.
Добавлено: Сб окт 31, 2015 09:57:31
Модератор
Карма: 90
Рейтинг сообщений: 1337
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4558 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Frosty85, а зачем кучу тем создавать, в которых Вам одно и то же разжёвывают ? То AVR, то PIC, то Си, то АСМ, то UART, то уже SPI, 128 бит, потом уже откуда то взялось число 136, ..... Определитесь уже, наконец, что Вы делаете, на чём и для чего ...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения