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

Помогите новичку: связь по разным протоколам и прочее по мк 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 пользователей онлайн

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