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

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


Dimas19904

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

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

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

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

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

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 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: .

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

А ты хотябы пробовал 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 пользователей онлайн

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