Технический форум по робототехнике.
Павел_Сергеевич » 06 янв 2015, 18:16
Всем доброго времени суток. Пытаюсь освоить WinAvr. первый раз залил программу диод на атмега8 замигал. второй раз заливаю выдает ошибку мак файла и все тут. и что именно заливать не сказано на сайте, заливал и саму прогу и хек файл и сам мак файл. может ошибка так как там уже залита программа, тогда как очистить память чипа. спасибо. пытаюсь учить с++ и параллельно вливать на чип. вот одна из моих первых программ. ее и пытаюсь залить.
- Код: Выделить всё • Развернуть
#define F_CPU 1000000UL // 1 MHz
#include <avr/io.h>
#include <avr/delay.h>
#include<iostream>
#include<conio.h>
int main(void) // начало основой программы
{
DDRD = 0xff; // все выводы порта D сконфигурировать как выходы
PORTD = 0xff; //устанавливаем 1 на всех выводах порта D
// включаем подтягивующие резисторы
//граница типа usigned long
unsigned long next=0; //предпоследний член
unsigned long last=1; //последний член
while (1)
{ // Бесконечный цикл
long sum=next+last;//сложение двух последних членов
next=last; //присвоение первому значению последнее
last=sum; //и последнего члена
double x=sum/100000;
double y=sum%1000000;
int a=x/2; // задаем пины
{if (a>5) a=a-5; else a=a;}
last=y;
if (a==1) PORTD |=_BV(PD1);
else if (a==2) PORTD |=_BV(PD2);
else if (a==3) PORTD |=_BV(PD3);
else if (a==4) PORTD |=_BV(PD4);
else if (a==5) PORTD |=_BV(PD5);
_delay_ms(250); // Ждем 0.25 сек.
PORTD &=~_BV(PD1);
PORTD &=~_BV(PD2);
PORTD &=~_BV(PD3);
PORTD &=~_BV(PD4);
PORTD &=~_BV(PD5);
_delay_ms(5); // Ждем 0.005 сек.
} // закрывающая скобка бесконечного цикла
} // закрывающая скобка основной программы
она должна мигать диодами в случайном порядке.
Последний раз редактировалось
Павел_Сергеевич 06 янв 2015, 20:25, всего редактировалось 2 раз(а).
Angel71 » 06 янв 2015, 18:28
для кода есть тег
- Код: Выделить всё • Развернуть
[code][/code]
если выаёт ошибку, логично выложить, что именно выводит. а сам код для решения проблемы заливки значения не имеет. и кстати для генерации случайных чисел есть специальная ф-я, а у вас в коде нечто...
одним словом дивное, лучше переделайте.
Павел_Сергеевич » 06 янв 2015, 18:50
> "make.exe" program
avrdude -p atmega8 -P lpt1 -c stk200 -U flash:w:my_test.hex
avrdude: AVR device not responding
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude done. Thank you.
make.exe: *** [program] Error 1
> Process Exit Code: 2
> Time Taken: 00:05
Добавлено спустя 1 минуту 6 секунд:
на счет кода, опираюсь на то что успел узнать с rnd работать не умею...
за основу взял программу числа Фибоначчи.
Angel71 » 06 янв 2015, 18:57
там написано, что avrdude чип не видит.
тыц
Павел_Сергеевич » 06 янв 2015, 19:06
странно, с начало видел, теперь не видит... провода все на месте... может лпт сгореть?
Angel71 » 06 янв 2015, 19:19
сгорел чип или порт, напряжение не то, настройки, с фьюзами чего и т.д. вариантов хватает
Павел_Сергеевич » 06 янв 2015, 19:26
чип мигает диодом, питание через стабилизатор l7805abv. первый раз то прошился... да на проводах от лпт стоят резисторы чтобы порт не сжеч
Madf » 06 янв 2015, 22:26
могли фюзы прошить криво, МК ввалился в особенное состояние, в котором он на данный момент не может работать)
RootAdmin » 06 янв 2015, 23:53
Работать может, а шиться - уже нет.
Павел_Сергеевич » 07 янв 2015, 14:10
спасибо, тогда вечером посмотрю, если есть второй чип попробую его прошить, потом отпишусь
Павел_Сергеевич » 07 янв 2015, 20:20
пишу отчет. замена чипа, ничего не дала, выкинул посредник (разъем)между чипом и лпт, припаял слот под чип сразу к поводам кабеля лпт, все заработало. пайка хреновая была.
теперь вопрос к программистам, код что я выложил, работает только в окне визуал с++, на чипе он не пашет. вот сам код первоначальный.
- Код: Выделить всё • Развернуть
#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
//граница типа usigned long
const unsigned long limit=4294967295;
unsigned long next=0; //предпоследний член
unsigned long last=1; //последний член
while(next<limit/2) //результат не должен превышать лемит(сначало делается вычисление потом сравнения)
{
cout<<"sum: "<<last<<" \n\n"; //вывод последнего члена
long sum=next+last;//сложение двух последних членов
next=last; //присвоение первому значению последнее
last=sum; //и последнего члена
double x=sum/100000;
double y=sum%1000000;
int a=(x/4)+1;
last=y;
cout<<"chislo: "<<x<<"\n"<<"ostatok: "<<y<<"\n"<<"pin: "<<a<<"\n\n\n";
}
cout<<endl;
return 0;
}
Добавлено спустя 2 минуты 3 секунды:потом я к значению "а" пытался привязать пины лап.