Dimas19904

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

28 сообщений в этой теме

Dimas19904    0

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

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

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

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

Изменено пользователем Dimas19904

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
admin    2 326

Читаем правила форума. Пункт II.1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Dimas19904    0
Источник для совсем ленивых 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: .

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
UTSource

Найдите миллионы труднодоступных

электронных компонентов

IGRISE    0

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

Поделиться сообщением


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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Dimas19904    0

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

Изменено пользователем Dimas19904

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Dimas19904    0

Решил разобраться с выводом информации на 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:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Dimas19904    0

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Duhas    35

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

Поделиться сообщением


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

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

Поделиться сообщением


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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
AndyBig    1

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

Поделиться сообщением


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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
AndyBig    1
Вообще то я занимаюсь изучением языка Си не так уж давно.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Dimas19904    0
Вообще то я занимаюсь изучением языка Си не так уж давно.

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

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

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

Изменено пользователем Dimas19904

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
YURGIN    2
Вообще то я занимаюсь изучением языка Си не так уж давно.

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

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

Все это переложить на си я думаю смогу. Вопрос в другом КАКИМ СПОСОБОМ НА СИ МОЖНО РАСДЕЛИТЬ СЛОВА НА СИМВОЛЫ??? :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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
AndyBig    1

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
retcom    0

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

#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;
}

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Dimas19904    0

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Dimas19904    0

Доброго времени суток всем. Вот переделал свою программу термометра на 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); 
}
}

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Duhas    35

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

Поделиться сообщением


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • @vg155 Вас не смущает что входная емкость силового полевика IRFP90N20DPBF  в вашем БП большая?
    • а вот слух то у всех разный, почему это вы не учитываете.? @MCH
    • Собрал себе простенькую эл. нагрузку, пока в виде полумакета. Начал гонять свой ЛБП и тут неожиданно вылезли возбуды в некоторых режимах, которые я раньше не видел при подключении разных мощных резисторов в качестве нагрузки. Согласился с гуглом, который обвиняет во всем этом безобразии мосфет, работающий в линейном режиме. Других причин просто не вижу.  Помогает только радикальное увеличение емкости на выходе БП. Причем, в режиме ограничения тока никаких тебе возбудов. Пришло в голову принудительно подключать электролит на выход только в режиме стабилизации напряжения. Идея проста - мосфет в ключевом режиме подключает либо отключает электролит к выходу БП. Попробовал, вроде работает, безобразия полностью пропали. У себя я подключал затвор прямо к выходу ОУ тока. При прекращении ограничения броска тока не будет, конденсатор ведь заряжен.
    • А чего ты ждешь, если даже параметры динамика измерить не соизволил?!
    • @Гость Kirill Я привёл список файлов для примера. Вы должны были сами догадаться, что для другой программы нужно подставлять и другие файлы. Вы же ранее точно не назвали какую именно программу Вам нужно компилировать. Что касается особенностей работы в AVR Studio 6, то я не могу сказать точно, я не работал с этой версией. Почитайте хелп для этой программы. Для названного в цитате архива программы нужно брать файл FM_SSD1306.asm.
    • Да, но производительный планшет стоит долларов 700, а такой же, если не мощнее ПК можно собрать за 150 долларов. Формата mini-ITX причем. Плюс собирая самостоятельно, можно купить видеокарту с гарантией на 3 года (некоторые магазы такое дают), потом 2 года попользоваться и продать с еще годом гарантии, купить следующую, я так раньше, лет 10 назад делал, когда был стационарный ПК. Потом продал, потому что захотел ноут, и все, лафа закончилась с продажей\покупкой гарантийных карт. И то же самое я делал с ЦП и памятью, и даже мат. платы так менял. Выходило, что я за 60% продавал старое и покупал новое снова с гарантией. Не такая великая потеря была, я же брал еще всякие бюджетные середнячки, то есть раз в 2 года вкладывал 100 долларов, и сидел на современенном железе. Ноутбуки так апать - дорого. Его только полностью надо менять. Может раз в лет 10. И то не хочется. Нашел еще https://www.amazon.com/Wireless-Transmitter-Receiver-Streaming-Satellite/dp/B07916BB66/ref=pd_day0_hl_23_7?_encoding=UTF8&pd_rd_i=B07916BB66&pd_rd_r=d60f5027-d539-11e8-b597-b92393ce99ab&pd_rd_w=L1OUX&pd_rd_wg=E9DrD&pf_rd_i=desktop-dp-sims&pf_rd_m=ATVPDKIKX0DER&pf_rd_p=ad07871c-e646-4161-82c7-5ed0d4c85b07&pf_rd_r=EK0PP8J6VFM5MVM0FE9B&pf_rd_s=desktop-dp-sims&pf_rd_t=40701&psc=1&refRID=EK0PP8J6VFM5MVM0FE9B такое, 85 долларов, дешевле нет. Ну короче да, легче забить на это. Если так подумать, то можно найти моник 15.6 и клаву с тачпадом, они стоят в районе 8 долларов самые дешевые. Только как их стыковать.... Петлями от ноутбука чтоли)) Хз, подумаю, легче поменять бук либо забить наверно. Делать такое могли бы допустим для людей, кто болеет чем-то, прикован к постели. Конечно это не мой случай, но я бы как раз такое купил. Моник+клава на петлях. От моника просто HDMI кабель идет к тумбочке, в ней стоит mini ITX системник, все супер... Книжки можно в тумбочку положить кое-какие, чаек поставить. Чем не варик...   Причем 60% продавал чтобы быстро скинуть, так люди продавали и за 70% от начальной стоимости. Ну я так не умел, я простой, но все равно, я покупал ЦП с гарантией 36 месяцев, видеокарту и память. Мат платы конечно шли с гарантией год. Ну я продавал видео и ЦП сначала, потом высматривал, может можно на ту же мать поставить современный ЦП, если не удавалось - скидывал за бесценок мать, покупал другую. Но я обычно мать брал на вырост, чтобы на нее выходили еще несколько лет новые ЦП и память. И в итоге реально за недорого, можно было апать железо. Раз в 2-2,5 года.
    • Можно попробовать. Надо посмотреть осциллограммы.