Перейти к содержанию

Помогите новичку: связь по разным протоколам и прочее по мк Avr


Dimas19904

Рекомендуемые сообщения

Всем привет. Я бы хотел здесь задавать свои глупые вопросы, а кому не сложно то пожалуйста помоите мне.

МК я использую ATmega8 и другие из этой серии. Язык исключительно си. Все это мне надо не для курсовых.

Мой вопрос: Мне надо программу которая могла бы передавать и принимать через USART. В интернете ничего подходящего я

не смог найти. Если у кого есть выложите пожалуйста программу (можно ссылку) или отправьте на Radiomax08@mail.ru

Изменено пользователем Dimas19904
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Источник для совсем ленивых http://forum.cxem.net/

Этим курсом я пользуюсь давненько, просто не мог разобраться с регистрами USART т.к. они у мк AT90 и ATmega (что

касается USART ) отличаются. Вчера я наконец то разобрался с регистрами USART у мк ATmega и написал

свою программу, которая передает символы через USART на пк. Пробовал пока-что на протеусе, на железе пока

не могу т.к. нет деталей. Но это не главное. Вот моя программа:

#include <mega8.h>
#include <stdio.h> 
#include <delay.h>
char i;
void main(void) {
i=123; 
delay_ms(1000);
while(1){
UCSRB=0x00;
UBRRL=0x19;
UCSRB=0x08;
printf("Test\n");
printf("i= ",i);
delay_ms(1000);
}
}

Но в ней как я понимаю после вывода на терминал слова "Test", курсор должен переходить на новую строку, но

этого не происходит.

И еще как можно вывести значение некой переменной (в данной программе это переменная "i") на терминал(пк)? не могу понять :unsure: . Помогите кто может :(:rolleyes: Заранее благодарен :rolleyes: .

Ссылка на комментарий
Поделиться на другие сайты

А ты хотябы пробовал help по CodeVisionAVR почитать....??? А, ...??? Ну скажем например про форматированый вывод...???

:unsure: Что-то я там ничего не нашел??

Ссылка на комментарий
Поделиться на другие сайты

Похоже протеус гонит при симуляции... Пробовал эту же программу на VMLAB там все нормально работает

Изменено пользователем Dimas19904
Ссылка на комментарий
Поделиться на другие сайты

Решил разобраться с выводом информации на lcd дисплей. Мне прислали программу, которая выводит на дисплей сообщение "Hello World"

Я сделал, что-бы выводимое сообщение "бегало" по дисплею. Кто-нибудь подскажите как сделать бегущую строку, т.е. мне нужно чтобы символы, которые заходят за пределы экрана появлялись в начале этой же строки и так бесконечно. Вот мой код:

#include <mega8.h> 
#include <delay.h>
#asm
.equ __lcd_port=0x12;PORTD
#endasm

// include the LCD driver routines
#include <lcd.h>

void main(void)
{
int  i =0;
lcd_init(20);
while (1)
{
// задержка 300млс
delay_ms(300);
lcd_clear();
i++;
if (i > 9) {
i =0;
}
lcd_putsf("		"); // Стирание предыдушей записи
lcd_gotoxy( i,0);
lcd_putsf("HELLO WORLD");
}
}

Индикатор я использую на основе чипа HD44780 20x2

Заранее благодарен :rolleyes:

Ссылка на комментарий
Поделиться на другие сайты

по идее смысл такой... сдвигаем влево на 1 символ сиволы в строке запомнив первый дописываемв строку первый и выводимзадержка снова сдвиг и вывод.... как это на сях сделать я щас не придумаю ... думай разбирайся как в си сделать сдвиг символа в троке ...

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

Ссылка на комментарий
Поделиться на другие сайты

по идее смысл такой... сдвигаем влево на 1 символ сиволы в строке запомнив первый дописываемв строку первый и выводимзадержка снова сдвиг и вывод.... как это на сях сделать я щас не придумаю ... думай разбирайся как в си сделать сдвиг символа в троке ...

Что-то немогу понять, как ето все написать на си ?

Ссылка на комментарий
Поделиться на другие сайты

по идее смысл такой... сдвигаем влево на 1 символ сиволы в строке запомнив первый дописываемв строку первый и выводимзадержка снова сдвиг и вывод.... как это на сях сделать я щас не придумаю ... думай разбирайся как в си сделать сдвиг символа в троке ...

Что-то немогу понять, как ето все написать на си ?

Кто-нибудь подскажите как сделать бегущую строку?

Ссылка на комментарий
Поделиться на другие сайты

Пипец... Я понимаю - задают вопросы когда не могут найти источник необходимой информации. Но просить подумать за себя - меня это вводит в шок...

Ссылка на комментарий
Поделиться на другие сайты

Пипец... Я понимаю - задают вопросы когда не могут найти источник необходимой информации. Но просить подумать за себя - меня это вводит в шок...

Вообще то я занимаюсь изучением языка Си не так уж давно.

по идее смысл такой... сдвигаем влево на 1 символ сиволы в строке запомнив первый дописываемв строку первый и выводимзадержка снова сдвиг и вывод.... как это на сях сделать я щас не придумаю ... думай разбирайся как в си сделать сдвиг символа в троке ...

С lcd-дисплеями я начал работать не так уж давно. Программу которую я приводил выше - это моя первая программа, написаная для lcd-дисплея.

Как сделать сдвиг в обычных цифрах(числах)- это легко, а вот как сделать это с символом - этого я пока никак немогу понять. Это и есть мой вопрос.

Ссылка на комментарий
Поделиться на другие сайты

Вообще то я занимаюсь изучением языка Си не так уж давно.

Для ответа на твой вопрос не нужно знать каких-то я зыков программирования. Надо просто придумать сам алгоритм, типа "запоминаем первый символ, затем берем второй символ и помещаем его на место первого, потом третий на место второго и так до последнего, после чего на место последнего символа ставим запомненный первый". Вот тебе и все циклическое смещение строки на символ влево. Если и теперь не можешь переложить все это на Си - учите язык.

Ссылка на комментарий
Поделиться на другие сайты

Вообще то я занимаюсь изучением языка Си не так уж давно.

Для ответа на твой вопрос не нужно знать каких-то я зыков программирования. Надо просто придумать сам алгоритм, типа "запоминаем первый символ, затем берем второй символ и помещаем его на место первого, потом третий на место второго и так до последнего, после чего на место последнего символа ставим запомненный первый". Вот тебе и все циклическое смещение строки на символ влево. Если и теперь не можешь переложить все это на Си - учите язык.

запоминаем первый символ, затем берем второй символ и помещаем его на место первого, потом третий на место второго и так до последнего, после чего на место последнего символа ставим запомненный первый"

Все это переложить на си я думаю смогу. Вопрос в другом КАКИМ СПОСОБОМ НА СИ МОЖНО РАСДЕЛИТЬ СЛОВА НА СИМВОЛЫ??? :huh: Собственно говоря мне это и непонятно?! Плизз кто-нибудь подскажите очень надо!!! :( Заранее благодарен.

Изменено пользователем Dimas19904
Ссылка на комментарий
Поделиться на другие сайты

Вообще то я занимаюсь изучением языка Си не так уж давно.

Для ответа на твой вопрос не нужно знать каких-то я зыков программирования. Надо просто придумать сам алгоритм, типа "запоминаем первый символ, затем берем второй символ и помещаем его на место первого, потом третий на место второго и так до последнего, после чего на место последнего символа ставим запомненный первый". Вот тебе и все циклическое смещение строки на символ влево. Если и теперь не можешь переложить все это на Си - учите язык.

запоминаем первый символ, затем берем второй символ и помещаем его на место первого, потом третий на место второго и так до последнего, после чего на место последнего символа ставим запомненный первый"

Все это переложить на си я думаю смогу. Вопрос в другом КАКИМ СПОСОБОМ НА СИ МОЖНО РАСДЕЛИТЬ СЛОВА НА СИМВОЛЫ??? :huh: Собственно говоря мне это и непонятно?! Плизз кто-нибудь подскажите очень надо!!! :( Заранее благодарен.

ВОТ ТУТ ПОСМОТРИ, МОЖЕТ ЧТО НАЙДЕШ http://www.mikrocontroller.net/articles/AV...meines_zum_UART

И ТУТ http://homepage.hispeed.ch/peterfleury/avr-software.html

И ЭТО http://mayak-bit.narod.ru/rs485.html

Изменено пользователем YURGIN
Ссылка на комментарий
Поделиться на другие сайты

Обычно возникают противоположные вопросы - как набор символов строки разбить на слова :))

Это же самые основы Си, почему бы не почитать любой самоучитель по языку, коих валом и в бумажном и в электронном виде? Раздел "Строки"...

Ссылка на комментарий
Поделиться на другие сайты

Вот тебе разбиение на чистом С++, переложи на МК:

#include<iostream.h>

int main()
{
  char *a = "my string";
  char b[9];

  for(int i=0; i<9; i++)
  {
  b[i]=a[i];
  cout<<b[i]<<endl;
  }

return 0;
}

Короче, когда освоишь дискретку, поймешь, какая ерунда тот код, который ты не мог сделать сам.

Совет: Существуют задачи. Зборники задач по С или С++. Скачай в инете. И делай. Сквозь лень, непонятность и слезы (даже стихами уже заговорил). Все через это проходят. Терпение и труд все перетрут. Главное не язык, а машинная логика. Выучить ее невозможно. Она только нарабатывается. Практикой.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Доброго времени суток всем!!!

Написал программу термометра с использованием датчика DS18B20 для вывода значения температуры использовал динамическую индикацию Вот собственно и мой код:

#include <mega8.h>
#include <ds1820.h>
#include <1wire.h>
#include <math.h>
#asm
  .equ __w1_port=0x15;PORTC
  .equ __w1_bit=2
#endasm
flash unsigned char ind[10]={0b10111011,0b10000010,0b01011011,0b11001011,0b11100010,
0b11101001,0b11111001,0b10000011,0b11111011,0b11101011}; 
unsigned char indt[6]={0,0,0,0,0,0},rom_code[8][9];
unsigned long number;
unsigned int n,k,i,result,devices,u,temp;
//*************************************************************************************
void d_ind(void) { //Динамическая индикация 

for(i=0;i<=5;i++) {
  indt[i]=number%10;
  number/=10;
}	
for (i=0;i<=5;i++) {
n=indt[i];
PORTD=~ind[n];
switch(i) {
case 0: result=2; break;
case 1: result=4; break;
case 2: result=8; break;
case 3: result=16; break;
case 4: result=32; break;
case 5: result=1;break;
} 
PORTB=result;
k=0;
while(k<800)k++;
PORTD=0xfb;
PORTB=0x00;
} //for
}
//**************************************************************************************		
void main(void) {
DDRD=0xfb;
DDRB=0xff;
devices=w1_search(0xf0,rom_code);
if (devices)
  {
while (1){
temp=ds1820_temperature_10(&rom_code[0,0]); 
number=temp;
d_ind(); 
}
  }
else
while (1){ number=123456;
d_ind();}
} //main

После прошивки мк индикаторы моргают при этом отображая температуру.

кварц я использую на 4мГц

:unsure: Кто-нибудь подскажите как это устранить Заранее спасибо :rolleyes:

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Доброго времени суток всем. Вот переделал свою программу термометра на lcd - дисплей.

Мне надо так чтобы при температуре равной 0`C на дисплее отображалось не 0.0, а скажем так 000.00 т.е. как

я понимаю отключить гашение незначащегося нуля.

Вот мой код:

#include <mega8.h> 
#include <delay.h>  
#include <stdio.h>
#include <math.h>
#asm
.equ __lcd_port=0x12;PORTD
#endasm
#include <lcd.h>
unsigned char lcd_buffer1[20],rom_code[8][9];
#asm
  .equ __w1_port=0x15;PORTC
  .equ __w1_bit=2
#endasm
#include <1wire.h>
#include <ds1820.h>
void main(void){
unsigned long temp;
lcd_init(20);
w1_search(0xf0,rom_code);
while (1){
temp=ds1820_temperature_10(&rom_code[0,0]); 
lcd_clear();
sprintf(lcd_buffer1,"t= %i.%i\xdfC\x7e",temp/100,abs(temp%100));
lcd_gotoxy(1,0);
lcd_puts(lcd_buffer1); 
}
}

Заранее благодарен.

Ссылка на комментарий
Поделиться на другие сайты

по идее можно покопавшись с форматированным выводом все сделать.. там насколько я помню можно указать колво знаков и до и после запятой... ищи в книжкаф по си, мне щас даже посмотреть некуда :( дома ремонт

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • @Богдан Назаренко , 4558 и 5532 на слух не отличить. Да и параметры у них практически одиннаковые. Мне показалось TL072 звучит хуже.
    • @maxim1881  Какой курс  студент ?  Прочитать схему  то умеешь ? И где - то к этой схеме есть описание  ...  Так вот по описанию и можно сделать то что  требуется ...  Я лично  два года учился , пока пришло просветение чтения схем  И так подтолкну  один блок тебе :  DD1.5 , DD1.6 , R9 C5 - генератор ... И так  далее ... Кароче  шукай  описание  в журналах на данную схему и все получится     Датчик пересечения ИК-луча Другая сфера применения аналоговых усилителей на основе микросхемы 4069 - инфракрасный датчик или фотоприемник инфракрасного сигнала. На рисунке 7 показана схема успешно эксплуатируемого уже несколько лет датчика, реагирующего на пересечение либо отражение инфракрасного луча. Интересно то, что в схеме нет широко используемых в таких случаях готовых интегральных фотоприемников. Сигнал принимается обычным ИК-фотодиодом, а усиление производится усилительными каскадами, выполненными на основе инверторов микросхемы 4069. Наличие шести инверторов в одном корпусе микросхемы 4069 позволяет весь датчик, как его приемную, так и передающую части выполнить на одной микросхеме 4069. И так, схема показана на рис. 7. Как обычно, ИК-датчик работающий на отражение или пересечение луча состоит из передатчика ИК-луча и его приемника. Передатчик ИК-луча состоит из ИК-светодиода HL1 (здесь светодиод, такой как в пультах ДУ аппаратуры), токового ключа на транзисторах VТ1 и VТ2 и генератора импульсов частотой около 8-10 kHz. Импульсы с выхода мультивибратора на элементах D1.5 и D1.6 поступают через токовый ключ на VT1 и VT2 на ИК-светодиод HL1. Резистор R11 ограничивает ток через светодиод. HL1 излучает ИК вспышки, следующие с частотой 8-10 kHz. Если существует видимость между HL1 и FH1, излученные вспышки воздействуют на фотодиод FH1 ив нем возникают импульсы тока. Благодаря резистору R1 они преобразуются в импульсы напряжения. Переменное напряжение через конденсатор С1 поступает на первый усилитель на элементе D1.1. Его в усилительный режим переводит резистор R2. Далее, через С2 усиленное переменное напряжение поступает на усилитель на D1.2. В цепи ООС D1.2 есть резистор R3, который смещает его вход в сторону напряжения логической единицы. В результате его выход смещен в сторону логического нуля. Поэтому, в отсутствие входного сигнала напряжение на С3 соответствует логическому нулю. Но при наличии входного сигнала за счет работы детектора на VD1 напряжение на С3 увеличивается до логической единицы. Выходные импульсы формирует триггер Шмитта на элементах D1.3 и D1.4. Фотодиод РН302 можно заменить любым ИК-фотодиодом. Налаживание датчика сводится к подбору сопротивления R3, чтобы при отсутствии сигнала на выходе D1.4 был ноль, а при наличии сигнала - единица. Везде вместо микросхемы 4069 можно попробовать микросхему К561ЛН2. Тюльгин Ю.М. РК-2016-03.
    • Ух... добавили вы мне оптимизма... Никогда б не подумал что  на такой мелочёвки жулики так заморочились.. Ну как сказать... В своё время я зарабатывал на ремонте 3УСЦТ и старше (само собой и смежной технике). Потом несколько лет ремонт связной спецтехники (основная задача - настройка-обслуживание, а ремонты - то по необходимости). Но последние лет 20 паяльник используется редко и то в основном для пайки проводов-разъёмов и разной мелочёвки.
    • 4558 неплохая микросхема, особо не отличается от 5532, и наушники потянет, если у вас нет завышенных требований.
    • Они да более мение хороши а вот флажки смотря где использовать,в блоки питания или НЧ части его можно использовать роботать будет хорошо но ВЧ не очень он уж тогда хороший получается обычно по сравнению с КМ конденсаторами,и кстати ещё один вопрос возник вот есть такие коричневые конденсаторы керамические современные с кодами они ещё,которые ещё бывают паралельно моторику в детских игрушках ставят и очень много где ещё,и он же получаеться как флажок примерно по характеристикам?потомучто что то и что то ставят много где,интересно было бы и про них узнать информацию,ещё я их ни когда не использовал,что они из себя такое эдакое представляют 
×
×
  • Создать...