Dimas19904

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

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

Dimas19904    0

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

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

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

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

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

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


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

Читаем правила форума. Пункт 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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас


  • Сообщения

    • Да лампочкой конечно на 220В.   Для начала этот до ума доведи.
    • Зачем вы такие злые? Как могу, так и понимаю... --- В общем и целом запустился, все работает, но... Осликом тыкал без развязки, хорошо не погорел, начинает потом глючить...но это ладно, надо от акума питать... Неисправность довольно непонятная...вышел из строя D015, заменил и все заработало.Проверял диод цешкой, кажет, что рабочий...непонятно. Он соединен не как в схеме, а идет последовательно с D08! Идем дальше... Вентиляторов 2, в момент запуска оба стартуют, потом один (первый) останавливается. Каждый старт, так происходит. Ну думаю, что-то с вентелем случилось. Вот теперь, внимательно, отпаиваю его, а теперь второй стартует и останавливается. Обратно запаиваю, все обратно вернулось...Что за чехарда такая???  И заключительный вопрос. Чем разрядить емкости? В сварочнике у меня стоит 4 банки по 560мкф. Впаивал 3 по 560к 0.5вт не помогает. Сварочник пытается сново запуститься...банки не разряжены!!! или больше резюков надо добавить? -------- Про микру читал...я понимаю, как примерно работает.  Я смотрю на сварочник на схему, снова на сварочник на схему и тут рождается мысль....можно проще сделать и надежнее аппарат...как думаете?
    • Недавича латунь старил в парах нашатыря. Покупается в аптеке. Проверить время выдержки на ненужном кусочке.
    • К примеру такой ШИМ: Его схема такова: Заменив транзисторы на низкоомные (например irfb3207) и пропаяв выводы толстыми шинами, обеспечив ne555 стабильным питанием(батарейка на 12 вольт например к C8), добавив активное охлаждение, добавив ёмкости, схема вытянет и 300 ампер.
    • Дык практически вышеуказанным тросиком, только наматывать его на ось (механизма подачи) в обратном направлении. В качестве рукава для этого тросика возьмите оболочку троса спидометра от какого-нибудь ТАЗика. Да и сам тросик в дело пойдет, только вам  его скорее всего нарастить придется (смотря как трос прокладывать будете от станка и до педали).
    • Если входное напряжение устраивает, то можно попробовать запараллелить 4 штуки. Регуляторами выходного напряжения выставить, чтобы ток делился поровну.