Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Meteor »

Грендайзер, ничо не понял. Но вот вариант в режиме помощник

Код: Выделить всё

-- SPI tranmitte/recieve

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

ENTITY SPI IS
PORT(
   clk:std_logic;--clock
   wr:in std_logic;-- data write
   sdin:in std_logic;--serial input pin
   DI:in std_logic_vector(7 downto 0);--data input
   DO:out std_logic_vector(7 downto 0);--data output
   sout:out std_logic;--serial output
   Bend:out std_logic--end serial exchange
   );
END SPI;

ARCHITECTURE spiex OF SPI IS

BEGIN
   PROCESS(clk,wr)
   variable cnt:unsigned(2 downto 0):="000";
   variable bf:std_logic_vector(7 downto 0);
   BEGIN
   if(wr='0')then
      cnt:="111";
      bf:=DI;--write data in buffer
      Bend<='0';
   else
      if(rising_edge(clk))then
         bf(7 downto 1):=bf(6 downto 0);
         bf(0):=sdin;
         sout<=bf(7);
         if(cnt="000")then
            Bend<='1';
         end if;
         cnt:=cnt-1;
      end if;
      DO<=bf;
   end if;
   end process;
end spiex;

Моделирование работы в ModelSim
Изображение
Вложения
spi.JPG
(23.49 КБ) 785 скачиваний
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Аватара пользователя
Грендайзер
Мучитель микросхем
Сообщения: 479
Зарегистрирован: Вт июн 02, 2009 22:38:40
Откуда: Город-герой Москва

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Грендайзер »

Здорово, спасибо, надо обмозговать эту программулину :) Но вот токо такая проблема, у меня никаких входных данных нет... у меня есть только проводок по которому идут синхроимпульсы, проводок, по которым передаются биты данных, и ещё один провод по которому у меня передаётся разрешающий импульс. За 30 нс до начала передачи данных, нужно установить сигнал разрешения в 0, затем передать данные, последовательно бит за битом, начиная со старшего (я не совсем втыкнул в систему, но по уму за один синхроимпульс передаётся 1 бит данных, верно?) и затем, спустя 30 нс после того, как ушёл последний (младший) бит данных необходимо перевести разрешающий сигнал в 1. Вот такая загангулина, и чёт я никак не допру, как это дело заделать :(
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chip115 »

И снова сдрасте )
Продолжаю развлекаться с UART в контроллере C8051F410
Хочу реализовать тупую передачу массива данных 1234 .
Но почему то в терминал приходят 01 01 02 03 04
Не могу разобраться в чем причина. Почему дважды приходит единица? Вот кусок кода.

Код: Выделить всё

#define EndOfTxFlag   TI0
#define EndOfRxFlag RI0
#define RxTxReg SBUF0
#define OnRx REN0=1;
#define OffRx REN0=0;

unsigned char UART_Buffer[4]={1,2,3,4};
char i=0,stop=0;
...
 while(stop!=1)
   {
      
      RxTxReg=UART_Buffer[i];
      if(EndOfTxFlag==1 & i<4)
      {   
         i++;
         EndOfTxFlag=0;
      }   
      if (i==4)
         stop=1;      
   }

Задумано так.
Пока весь массив не передадим , продолжаем высылать поочередно данные из массива.
Как только счетчик i выходит за пределы массива - выставляем лог.1 в переменной stop и выходим из главного цикла.
Весь код в приложении.

И еще вопрос. как мне пересылать строки?
создать массив,скажем

Код: Выделить всё

char str[]="1234";

и аналогично пихать в регистр SBUF0 по одному символу?
Тогда получится что будет бесконечно передаваться '1' .
В АВР видел что через UART передают строки по средсвам

Код: Выделить всё

getchar(); 

тут такое реально провернуть? Если да,то как грамотно реализовать это?
Вложения
Коту.c
main
(5.44 КБ) 293 скачивания
Последний раз редактировалось Chip115 Вт фев 22, 2011 20:16:54, всего редактировалось 1 раз.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
pvsglks
Родился
Сообщения: 1
Зарегистрирован: Вт фев 22, 2011 19:35:50

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение pvsglks »

Привет всем. Подскажите, существует ли возможность в ATMega8 по сигналу ICP1 произвести сброс таймера аппаратно? Задача состоит в том, чтобы измерить период следования импульсов на ICP1, при этом нужно, чтобы после каждого заполнения ICR1, таймер обнулялся. Т.е. при обращении в любой момент времени к ICR1, можно было бы знать период последнего колебания. Применение прерываний в моем случае крайне нежелательно. Спасибо.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Gudd-Head »

Chip115 писал(а):while(stop!=1)
{
if (i==4)
stop=1;
}

1) Я, конечно, не знаток СИ... Но почему бы просто не написать

Код: Выделить всё

while(stop!=4)
   {
   stop++;      
   }

Chip115, у вас программатор наверняка с отладчиком!?! Поставьте точки останова и смотрите :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chip115 »

ну я с отладчиком не очень... Пишу в оболочке Keil.
В отладчике не принимает/посылает данные в UART. И не знаю как сделать точки остановки да и имею смутное представление о их назначении :(
Поможете разобраться ?:)
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Gudd-Head »

Chip115 писал(а):Пишу в оболочке Keil.

А у меня ихняя Silicon Laboratories IDE, но СИшный компилятор тоже Кейл... На работе (дома только оболочка).
Chip115 писал(а):В отладчике не принимает/посылает данные в UART. И не знаю как сделать точки остановки да и имею смутное представление о их назначении :(
Поможете разобраться ?:)

Конечно помогу :) Нужно только уйти из общей темы чтобы не мешали :wink:
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
124bit
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт янв 25, 2011 04:48:40

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение 124bit »

Ребята, я правильно понимаю, что частота МК во время работы зависит от напряжения?\
к примеру
подал 3 V - 10 мгц, подал 5 V -20 стало и тп?
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ploop »

Ребята, я правильно понимаю, что частота МК во время работы зависит от напряжения?\

Как сказать... зависит, но во-первых, если МК тактируется от RC-генератора, во-вторых не так существенно.

Так, как вы сказали, может зависеть максимальная частота, т.е. МК с максимальной тактовой частотой 20МГц на ней будет работать только при 5В питании, а при 3В - не запустится вообще. Зато на 8МГц он будет работать при любом питании.

Если используется кварцевый резонатор для тактирования, то частота от напряжения питания не зависит ни как.
mrkea
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср ноя 17, 2010 15:38:40

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение mrkea »

каким должен быть log при правильной компиляции программой AVReal?
124bit
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт янв 25, 2011 04:48:40

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение 124bit »

Вот предположим у меня есть микропроцессор с макс. частотой 20mhz, есть прошивка.
Я прошил всунул в примитивную схему с питание в 3 вольта и без каких либо резонаторов.
Все работает - я радуюсь.


Нооо у меня есть еще один МК, такой же, но с буквочкой V в конце. Т.е. его максимальная частота 10 mhz
внимание вопрос:
могу ли я второй тоже использовать в такой же схеме или надо чего-то поглядеть в прошивке?

(в данном случае у меня мк тини861)
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ploop »

Вот предположим у меня есть микропроцессор с макс. частотой 20mhz, есть прошивка.
Я прошил всунул в примитивную схему с питание в 3 вольта и без каких либо резонаторов.

Без резонатора он не будет работать на 20МГц, а будет на 1-4-8 (в основном такие частоты)

Нооо у меня есть еще один МК, такой же, но с буквочкой V в конце. Т.е. его максимальная частота 10 mhz
внимание вопрос:
могу ли я второй тоже использовать в такой же схеме или надо чего-то поглядеть в прошивке?

т.к. первый будет работать, допустим, на 4МГц, то и второй заработает.

А вот если первый вы принудительно заставите работать на 20МГц, поставив кварц, то:
1. Возможно, при 3В он не запустится (в даташите написано)
2. Если запустится - будет работать не стабильно
3. Второй на этой частоте не будет работать.

Да, и частоты (параметры тактирования и другие служебные вещи) не задаются в прошивке, они задаются битами конфигурации - фьюзами.
Аватара пользователя
Грендайзер
Мучитель микросхем
Сообщения: 479
Зарегистрирован: Вт июн 02, 2009 22:38:40
Откуда: Город-герой Москва

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Грендайзер »

124bit писал(а):Вот предположим у меня есть микропроцессор с макс. частотой 20mhz, есть прошивка.
Я прошил всунул в примитивную схему с питание в 3 вольта и без каких либо резонаторов.
Все работает - я радуюсь.


Нооо у меня есть еще один МК, такой же, но с буквочкой V в конце. Т.е. его максимальная частота 10 mhz
внимание вопрос:
могу ли я второй тоже использовать в такой же схеме или надо чего-то поглядеть в прошивке?

(в данном случае у меня мк тини861)

Нет, если различие контроллеров лишь в максимальной тактовой частоте. Правда есть нюансы, а именно:
1) В программе могут быть реализованы какие-либо временные задержки, которые заточены скажем на 20МГц, и если ты всунишь туда 10МГЦ естественно всё поплывёт... однако, если схемы работают от внутренних генераторов, то для тини и мега частота генератора составляет 1 МГц, так, что всё пучком :)
2) Необходимо убедиться, что работают контроллеры именно от внутренних генераторов, тобиш проверить как там фьюзы запрограммированы
124bit
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт янв 25, 2011 04:48:40

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение 124bit »

супер. пасиба за исчерпывающии ответы
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Meteor »

Грендайзер писал(а):Здорово, спасибо, надо обмозговать эту программулину

Тут один регистр, в который заталкиваются данные и из него же выталкиваются.
Грендайзер писал(а): Но вот токо такая проблема, у меня никаких входных данных нет... у меня есть только проводок по которому идут синхроимпульсы, проводок, по которым передаются биты данных, и ещё один провод по которому у меня передаётся разрешающий импульс.

Тут тоже sdin-вход последовательных данных
sout-выход последовательных данных
clk- синхроимпульс
Грендайзер писал(а): За 30 нс до начала передачи данных, нужно установить сигнал разрешения в 0, затем передать данные, последовательно бит за битом, начиная со старшего (я не совсем втыкнул в систему, но по уму за один синхроимпульс передаётся 1 бит данных, верно?) и затем, спустя 30 нс после того, как ушёл последний (младший) бит данных необходимо перевести разрешающий сигнал в 1. Вот такая загангулина, и чёт я никак не допру, как это дело заделать :(

Да в этом проекте передача идет старшим битом вперед. На каждый бит дается один синхроимпульс.
Если не знаете с чего начать проектирование - нарисуйте (не описывайте словами) временную диаграмму. На ней должны быть те сигналы которые уже известны: тактовый, передающий, приемный, выбор. Ну а далее останется добавить сигналы (внутренние / внешние) для организации процесса.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
mrkea
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср ноя 17, 2010 15:38:40

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение mrkea »

mrkea покажите, как инициализируете. Но в этой теме


ploop, так же как написано в обучалке
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ploop »

Ну дайте же наконец кусок кода!
И не забывайте - если памяти больше 256 байт, идут двухбайтные адреса, что надо учитывать при инициализации:

Код: Выделить всё

LDI temp, low(RAMEND)   
OUT SPL, temp     
LDI temp, high(RAMEND)
OUT SPH, temp
mrkea
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср ноя 17, 2010 15:38:40

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение mrkea »

ploop, заменил на твой код и все заработало :)) .Спасибо за помощь!
Аватара пользователя
Грендайзер
Мучитель микросхем
Сообщения: 479
Зарегистрирован: Вт июн 02, 2009 22:38:40
Откуда: Город-герой Москва

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Грендайзер »

Meteor, спасибо, начал потихоничку догонять... А то у меня таланта на написание програм совсем нет... да и практики тоже :( , дополнительное спасибо за разъяснения, а то я от этого дела спился бы :(
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ploop »

ploop, заменил на твой код и все заработало .Спасибо за помощь!

Дык всегда пожалуйста!
Но ты хоть понял, почему так, а не по другому? :)
Важно не то, что заработал, важно понять, почему (не)заработал!
Ответить

Вернуться в «Разные вопросы по МК»