Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Martin Prokopič 17. 01. 2013, 22:05:41
-
Dobrý den,
k vánocům jsem dostal stavebnici Roborobo robokit 2, ve které je mimo jiné i procesorová deska s ATmegou8A a nějakým čipem ILX232D. Deska se dá programovat v programu Rogic, což je vlastně grafické rozhraní pro jazyk C. Po uložení vygeneruje soubor main.h a program.c. Po troše úprav se mi pomocí winavr podařilo zkompilovat tyto soubory, ale váhám, jak program dostat do procesoru. když napíšu avrdude -p atmega8 -P com3 -c stk500 -U flash:w:program.hex a je robot zaplý, tak příkaz nic nedělá, nic nevypisuje, prostě stále běží a musím ho ukončit pomoci Ctrl+C, jinak by běžel věčně. Když je robot vyplý, tak se ukáže chyba, že se to na něj nemůže připojit. Tak mi prosím poraďte, jak dostat můj zkompilovaný program do procesoru.
S pozdravem Martin P.
-
A to je snad s stk500 kompatibilní? Neřekl bych, pravděpodobně to má v sobě vlastní bootloader, který megu přeprogramuje -> bude to chtít vyvést vývody na programovaní (třeba ISP) a externí programátor nebo zjistit co je to za bootloader, jakej protokol používá a najít si/napsat si na to obslužný program.
-
Je dost možný, že jsou pojistky nastavený tak, že bude fungovat jen paralelní programování.
-
Jsem do těhle věcí začátečník, procesor vidim poprvý v životě. Nechci si ten procesor nějak rozbít, aby pak nešel ani programovat tim programem Rogic. Je to čínská firma, i některé stránky v manuálu nejsou přeložené :) Poraďte, co konkrétně mam dělat, moc tomu nerozumim.
-
A oni v manualu rikaji, ze se ma pouzit avrdude???
Dle tohoto to vypada, ze WinAVR obsahuje vse co by jsi mel potrebovat.
http://www.roboteshop.com/roborobo/product-updates/roborobo/robot-kit-usb-isp-1160.html (http://www.roboteshop.com/roborobo/product-updates/roborobo/robot-kit-usb-isp-1160.html)
takze:
http://www.roboteshop.com/roborobo/software/159-robokit-c-language.html (http://www.roboteshop.com/roborobo/software/159-robokit-c-language.html)
-
Zdravim, v manualu pisou, jak mam co sestavit a vysvetluji jak programovat v tom Rogic. To normalne funguje, jen me ten Rogic omezuje a tak bych chtel zkusit neco vice. Ja vubec nemam ani tucha jak ta komunikace funguje a co mam udelat. Stahoval jsem si na ntbk nejaky balik s winavr a avr studiem z http://roborobo.co.kr/
-
A to je snad s stk500 kompatibilní? Neřekl bych, pravděpodobně to má v sobě vlastní bootloader, který megu přeprogramuje
Bootloader muze stk500 emulovat. Dela se to tak bezne, napr. Arduino bootloader je tak udelany.
když napíšu avrdude -p atmega8 -P com3 -c stk500 -U flash:w:program.hex a je robot zaplý, tak příkaz nic nedělá, nic nevypisuje, prostě stále běží a musím ho ukončit pomoci Ctrl+C, jinak by běžel věčně. Když je robot vyplý, tak se ukáže chyba, že se to na něj nemůže připojit. Tak mi prosím poraďte, jak dostat můj zkompilovaný program do procesoru.
Zkus pridat -vvvv a vlozit sem, co to presne vypsalo.
-
C:\Users\Martin\servbot>avrdude -p atmega8 -P com3 -c stk500 -U flash:w:servbot.hex -vvvv
avrdude: Version 5.10, compiled on Jan 19 2010 at 10:45:23
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "C:\WinAVR-20100110\bin\avrdude.conf"
Using Port : com3
Using Programmer : stk500A dál už to nic nedělá
-
Co je ten com3? Fyzicky com nebo prevodnik do usb?
Pokud prevodnik, tak to tam kope pres nejakej bootloader a stoprocentne to neni kompatibilni se stk500.
-
Je to nějaká věc do usb, na jednom konci to má usb A a na druhém sériovej port. Ve správci zařízení se to hlásí jako Silicon Labs CP210x USB to UART Bridge (COM3)
-
No ja som mal problem s prevodnikmi na RS232 konkretne s programatorom Pony prog a to taky, ze nahravanie trvalo i hodinu (Problem bol v tom, ze programator vyuzival riadiace linky RS232 portu ale ten prevodnik to prepinanie Log 0 a 1 proste nezvladal robit dostatocne rychlo a preto nahravanie trvalo hodne dlho aspon teda myslim). Skus to pustit s parametrami -vvv a pockat hodne dlho:-)
-
No ja som mal problem s prevodnikmi na RS232 konkretne s programatorom Pony prog a to taky, ze nahravanie trvalo i hodinu (Problem bol v tom, ze programator vyuzival riadiace linky RS232 portu ale ten prevodnik to prepinanie Log 0 a 1 proste nezvladal robit dostatocne rychlo a preto nahravanie trvalo hodne dlho aspon teda myslim). Skus to pustit s parametrami -vvv a pockat hodne dlho:-)
No já jsem již v minulých příspěvcích popisoval, že přes ten program Rogic se to nahrává úplně v pohodě, i hodně dlouhý programy se nahrají za méně než 30s. Můžu vám napsat co mám v souborech main.h a program.c
main.h
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <stdlib.h>
#define IS(input) (input<6)?(PINC & (1<<input)):(PINB & (1<<(input-4)))
#define SET(output) (output<2)?(PORTB |= (1<<output)):(PORTD |= (1<<output))
#define CLR(output) (output<2)?(PORTB &= ~(1<<output)):(PORTD &= ~(1<<output))
#define OUT1 0x01
#define OUT2 0x02
#define OUT3 0x04
#define OUT4 0x08
#define OUT5 0x10
#define OUT6 0x20
#define OUT7 0x40
#define OUT8 0x80
#define IN1 (INPUT&0x01)
#define IN2 (INPUT&0x02)
#define IN3 (INPUT&0x04)
#define IN4 (INPUT&0x08)
#define IN5 (INPUT&0x10)
#define IN6 (INPUT&0x20)
#define IN7 (INPUT&0x40)
#define REMOCON1 (REMOCON&0x01)
#define REMOCON2 (REMOCON&0x02)
#define REMOCON3 (REMOCON&0x04)
#define REMOCON4 (REMOCON&0x08)
#define REMOCON5 (REMOCON&0x10)
#define PWM_PERIOD 200 // 0.01us X 200 = 2ms
/// General function declaration
void sensor(void); //interrupt func
unsigned char RcvCal(unsigned char data); //interrupt remocon func
void RcvRemoconData(unsigned char raw_nbl_data); //interrupt remocon func
void motor1(signed int velocity);
void motor2(signed int velocity);
void motor3(signed int velocity);
void motor4(signed int velocity);
void servo1(unsigned char position);//0~256
void servo2(unsigned char position);//0~256
void servo3(unsigned char position);//0~256
void servo4(unsigned char position);//0~256
void servo5(unsigned char position);//0~256
void servo6(unsigned char position);//0~256
void servo7(unsigned char position);//0~256
void servo8(unsigned char position);//0~256
void delay_ms(unsigned int count);
void Delay_us(unsigned int count);
void on(unsigned char output_port);
void off(unsigned char output_port);
volatile unsigned char spdTable[16] = {0,15,30,45,60,75,90,105,120,135,150,160,170,180,190,200};
volatile unsigned char g_bPwmDuty[8] = {0, 0, 0, 0, 0, 0, 0, 0};
volatile unsigned char g_bPortServo = 0;
volatile unsigned char g_bServoStart = 0;
volatile unsigned int g_iServoPosition[8];
volatile unsigned char g_cMotor=0;
volatile unsigned int g_iServoTracking[8];
volatile unsigned int g_iServoVelocity[8];
volatile unsigned char g_bPortLevel=0;
volatile unsigned char g_bPortFlag=0;
volatile unsigned char RemoconPort = 6;
volatile unsigned char PreRemoconLevelFlag = 0;
volatile unsigned char RemoconHighCnt = 0;
volatile unsigned char RemoconLowCnt = 0;
volatile unsigned char REMOCON = 0; // the remocon key data : [/][/][/][M][R][L][B][F]
volatile unsigned char RemoconUse = 0; //remocon use flag
volatile unsigned char T = 1;
volatile unsigned char INPUT=0;
volatile unsigned char REMOCON_USE=0;
volatile unsigned int g_iGlobalDelay=0;
ISR(SIG_OVERFLOW1)
{
static unsigned int temp=0;
if(g_bPortServo & (1<<g_cMotor))
{
g_iServoTracking[g_cMotor]=g_iServoPosition[g_cMotor];
if(g_bPortLevel)
{
SET(g_cMotor);
temp=0xffff-g_iServoTracking[g_cMotor];
TCNT1=temp;
g_bPortLevel=0;
}
else
{
CLR(g_cMotor);
temp=0x0af0-g_iServoTracking[g_cMotor];
temp=0xffff-temp;
TCNT1=temp;
g_bPortLevel=1;
g_cMotor++;
if(g_cMotor>7) g_cMotor=0;
}
}
else
{
TCNT1= 0xf50f;
g_cMotor++;
if(g_cMotor>7) g_cMotor=0;
}
}
ISR(SIG_OUTPUT_COMPARE2)
{
sensor();
g_iGlobalDelay++;
if((g_bPortServo & 0x01)==0)
{
if((g_bPortFlag & 0x01) && T<=g_bPwmDuty[0])
PORTB |= 0x01;
else
PORTB &= ~0x01;
}
if((g_bPortServo & 0x02)==0)
{
if((g_bPortFlag & 0x02) && T<=g_bPwmDuty[1])
PORTB |= 0x02;
else
PORTB &= ~0x02;
}
if((g_bPortServo & 0x04)==0)
{
if((g_bPortFlag & 0x04) && T<=g_bPwmDuty[2])
PORTD |= 0x04;
else
PORTD &= ~0x04;
}
if((g_bPortServo & 0x08)==0)
{
if((g_bPortFlag & 0x08) && T<=g_bPwmDuty[3])
PORTD |= 0x08;
else
PORTD &= ~0x08;
}
if((g_bPortServo & 0x10)==0)
{
if((g_bPortFlag & 0x10) && T<=g_bPwmDuty[4])
PORTD |= 0x10;
else
PORTD &= ~0x10;
}
if((g_bPortServo & 0x20)==0)
{
if((g_bPortFlag & 0x20) && T<=g_bPwmDuty[5])
PORTD |= 0x20;
else
PORTD &= ~0x20;
}
if((g_bPortServo & 0x40)==0)
{
if((g_bPortFlag & 0x40) && T<=g_bPwmDuty[6])
PORTD |= 0x40;
else
PORTD &= ~0x40;
}
if((g_bPortServo & 0x80)==0)
{
if((g_bPortFlag & 0x80) && T<=g_bPwmDuty[7])
PORTD |= 0x80;
else
PORTD &= ~0x80;
}
if(PreRemoconLevelFlag)
{
if(IS(RemoconPort))
{
RemoconHighCnt++;
}
else
{
RemoconLowCnt = 1;
RcvRemoconData(RemoconHighCnt);
PreRemoconLevelFlag = 0;
}
}
else
{
if(IS(RemoconPort))
{
RemoconHighCnt = 1;
PreRemoconLevelFlag = 1;
}
else
{
if(RemoconLowCnt++ > 20)
{
RemoconLowCnt = 1;
REMOCON = 0;
}
}
}
if(T == PWM_PERIOD) T = 1;
else T++;
}
unsigned char RcvCal(unsigned char data)
{
if(data<70)
{
if(data<20) return 1;
else if(data<30) return 2;
else if(data<40) return 3;
else if(data<50) return 4;
else if(data<60) return 5;
else if(data<70) return 6;
}
else if(data<130)
{
if(data<80) return 7;
else if(data<90) return 8;
else if(data<100) return 9;
else if(data<110) return 10;
else if(data<120) return 11;
else if(data<130) return 12;
}
else if(data<190)
{
if(data<140) return 13;
else if(data<150) return 14;
else if(data<160) return 15;
else if(data<170) return 16;
else if(data<180) return 17;
else if(data<190) return 18;
}
return 0;
}
void servo1(unsigned char position)
{
if(position>205) position=205;
g_bPortServo |= 0x01;
g_bPortFlag &= ~ (0x01);
g_iServoVelocity[0]=0x40;
g_iServoPosition[0]=(unsigned int)((position<<3)+650);
if((g_bServoStart&0x01)==0) g_iServoTracking[0]=(unsigned int)((position<<3)+650);
g_bServoStart|=0x01;
}
void servo2(unsigned char position)
{
if(position>205) position=205;
g_bPortServo |= 0x02;
g_bPortFlag &= ~ (0x02);
g_iServoVelocity[1]=0x40;
g_iServoPosition[1]=(unsigned int)((position<<3)+650);
if((g_bServoStart&0x02)==0) g_iServoTracking[1]=(unsigned int)((position<<3)+650);
g_bServoStart|=0x02;
}
void servo3(unsigned char position)
{
if(position>205) position=205;
g_bPortServo |= 0x04;
g_bPortFlag &= ~ (0x04);
g_iServoVelocity[2]=0x40;
g_iServoPosition[2]=(unsigned int)((position<<3)+650);
if((g_bServoStart&0x04)==0) g_iServoTracking[2]=(unsigned int)((position<<3)+650);
g_bServoStart|=0x04;
}
void servo4(unsigned char position)
{
if(position>205) position=205;
g_bPortServo |= 0x08;
g_bPortFlag &= ~ (0x08);
g_iServoVelocity[3]=0x40;
g_iServoPosition[3]=(unsigned int)((position<<3)+650);
if((g_bServoStart&0x08)==0) g_iServoTracking[3]=(unsigned int)((position<<3)+650);
g_bServoStart|=0x08;
}
void servo5(unsigned char position)
{
if(position>205) position=205;
g_bPortServo |= 0x10;
g_bPortFlag &= ~ (0x10);
g_iServoVelocity[4]=0x40;
g_iServoPosition[4]=(unsigned int)((position<<3)+650);
if((g_bServoStart&0x10)==0) g_iServoTracking[4]=(unsigned int)((position<<3)+650);
g_bServoStart|=0x10;
}
void servo6(unsigned char position)
{
if(position>205) position=205;
g_bPortServo |= 0x20;
g_bPortFlag &= ~ (0x20);
g_iServoVelocity[5]=0x40;
g_iServoPosition[5]=(unsigned int)((position<<3)+650);
if((g_bServoStart&0x20)==0) g_iServoTracking[5]=(unsigned int)((position<<3)+650);
g_bServoStart|=0x20;
}
void servo7(unsigned char position)
{
if(position>205) position=205;
g_bPortServo |= 0x40;
g_bPortFlag &= ~ (0x40);
g_iServoVelocity[6]=0x40;
g_iServoPosition[6]=(unsigned int)((position<<3)+650);
if((g_bServoStart&0x40)==0) g_iServoTracking[6]=(unsigned int)((position<<3)+650);
g_bServoStart|=0x40;
}
void servo8(unsigned char position)
{
if(position>205) position=205;
g_bPortServo |= 0x80;
g_bPortFlag &= ~ (0x80);
g_iServoVelocity[7]=0x40;
g_iServoPosition[7]=(unsigned int)((position<<3)+650);
if((g_bServoStart&0x80)==0) g_iServoTracking[7]=(unsigned int)((position<<3)+650);
g_bServoStart|=0x80;
}
void RcvRemoconData(unsigned char raw_nbl_data)
{
unsigned char cal_data;
static unsigned char step = 0;
static unsigned char buf[2];
unsigned char nbl_data;
if(raw_nbl_data < 185)
{
cal_data=raw_nbl_data+5;
nbl_data=RcvCal(cal_data);
}
else
nbl_data = 0;
switch(step)
{
case 0:
if(nbl_data == 1)
step++;
break;
case 1:
buf[0] = nbl_data - 2;
step++;
break;
case 2:
buf[1] = nbl_data - 2;
REMOCON = ((buf[0]&0x0F)|((buf[1]<<4)&0xF0));
step = 0;
break;
}
}
void motor1(signed int velocity)
{
g_bPortFlag|=0x03;
g_bPortServo&=~(0x03);
if(velocity==0)
{
g_bPwmDuty[0] = 200;
g_bPwmDuty[1] = 200;
}
else if(velocity<0)
{
g_bPwmDuty[0] = 0;
g_bPwmDuty[1] = spdTable[abs(velocity)];
}
else
{
g_bPwmDuty[0] = spdTable[velocity];
g_bPwmDuty[1] = 0;
}
}
void motor2(signed int velocity)
{
g_bPortFlag|=0x0c;
g_bPortServo&=~(0x0c);
if(velocity==0)
{
g_bPwmDuty[2] = 200;
g_bPwmDuty[3] = 200;
}
else if(velocity<0)
{
g_bPwmDuty[2] = 0;
g_bPwmDuty[3] = spdTable[abs(velocity)];
}
else
{
g_bPwmDuty[2] = spdTable[velocity];
g_bPwmDuty[3] = 0;
}
}
void motor3(signed int velocity)
{
g_bPortFlag|=0x30;
g_bPortServo&=~(0x30);
if(velocity==0)
{
g_bPwmDuty[4] = 200;
g_bPwmDuty[5] = 200;
}
else if(velocity<0)
{
g_bPwmDuty[4] = 0;
g_bPwmDuty[5] = spdTable[abs(velocity)];
}
else
{
g_bPwmDuty[4] = spdTable[velocity];
g_bPwmDuty[5] = 0;
}
}
void motor4(signed int velocity)
{
g_bPortFlag|=0xc0;
g_bPortServo&=~(0xc0);
if(velocity==0)
{
g_bPwmDuty[6] = 200;
g_bPwmDuty[7] = 200;
}
else if(velocity<0)
{
g_bPwmDuty[6] = 0;
g_bPwmDuty[7] = spdTable[abs(velocity)];
}
else
{
g_bPwmDuty[6] = spdTable[velocity];
g_bPwmDuty[7] = 0;
}
}
void on(unsigned char output_port)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(output_port&(1<<i))
{
g_bPortFlag|=(1<<i);
g_bPortServo&=~(1<<i);
g_bPwmDuty[i]=200;
}
}
}
void off(unsigned char output_port)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(output_port&(1<<i))
{
g_bPortFlag&=~(1<<i);
g_bPortServo&=~(1<<i);
g_bPwmDuty[i]=0;
}
}
}
void delay_ms(unsigned int count)
{
unsigned int i;
for(i=0;i<count;i++)
{
Delay_us(840);
}
}
void Delay_us(unsigned int count)
{
unsigned int i;
for(i=0;i<count;i++);
}
void sensor(void)
{
INPUT=~(PINC&0x3f);
if(PINB&0x04) INPUT&=~(0x40);
else INPUT|=0x40;
INPUT&=0x7f;
}
void start(void)
{
DDRB |= 0x03;
DDRD |= 0xFC;
TIMSK |= 0x80;
TCCR2 = 0x0a;
OCR2 = 100;
TCCR1A = 0x00;
TCCR1B = 0x02;
TIMSK|=0x04;
PORTB |= 0x04;
PORTC |= 0x3F;
sei();
delay_ms(500);
}
void end(void)
{
motor1(0);
motor2(0);
motor3(0);
motor4(0);
PORTB = 0x00;
PORTC = 0x00;
off(OUT1);
off(OUT2);
off(OUT3);
off(OUT4);
off(OUT5);
off(OUT6);
off(OUT7);
off(OUT8);
}
program.c
#include "main.h"
int main(void)
{
start();
on(OUT6);
delay_ms(1000);
off(OUT6);
end();
return 0;
}
-
No ja som mal problem s prevodnikmi na RS232 konkretne s programatorom Pony prog a to taky, ze nahravanie trvalo i hodinu (Problem bol v tom, ze programator vyuzival riadiace linky RS232 portu ale ten prevodnik to prepinanie Log 0 a 1 proste nezvladal robit dostatocne rychlo a preto nahravanie trvalo hodne dlho aspon teda myslim). Skus to pustit s parametrami -vvv a pockat hodne dlho:-)
CP2102 převodník já zrovna mám a ten je rychlý.
-
C:\Users\Martin\servbot>avrdude -p atmega8 -P com3 -c stk500 -U flash:w:servbot.hex -vvvv
avrdude: Version 5.10, compiled on Jan 19 2010 at 10:45:23
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "C:\WinAVR-20100110\bin\avrdude.conf"
Using Port : com3
Using Programmer : stk500A dál už to nic nedělá
Hm, tak to je blby. Po tomhle nasleduje posilani:
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14]
...takze on ani nic neni schopnej poslat, to je divny. S tim teda asi neporadim...
-
Můžu vám napsat co mám v souborech main.h a program.c
To s tim vubec nesouvisi. Problem je v komunikaci mezi avrdude a robotem.
Jinak, pokud by se ti podarilo k tomu pripojit normalni ISP programator, nemusis se zniceni bat, protoze stary firmware se z toho da vycist a pak pripadne nahrat z5.
-
Jinak, pokud by se ti podarilo k tomu pripojit normalni ISP programator, nemusis se zniceni bat, protoze stary firmware se z toho da vycist a pak pripadne nahrat z5.
To ovšem nesmí být zamčená bootloader sekce.
-
To ovšem nesmí být zamčená bootloader sekce.
Proc? Pomoci ISP se odemce.
-
Resp. teda pokud se nepletu, na ISP programovani nema hodnota lockbitu vliv.
-
Takže, můžete mi prosím poslat odkaz na nějaký (levný) programátor, se kterým by se to tam dalo nahrát? Na té destičce je vývod na ISP. také by se hodil nějaký návod jak s tím neodpálit ten procesor. P.S.: Je mi 13 let
-
Také mě napadlo, jestli by nebylo možné nějakým způsobem odposlouchávat tu komunikaci mezi tím Rogic a tím robotem a zjistit, jakým způsobem komunikují. Je toto možné?
-
vypis, pokud je to mozny, vsechny "velky" cipy, co se nachazej na hlavni desce krom ty atmegy... Ale stoprocentne to bude fungvat takhle... podobne jako arduino
-
Proc? Pomoci ISP se odemce.
AVRka nemám nastudovaný detailně, ale předpokládám, že ty lockbity budou fungovat podobně jako u PICů, tam je možné je taky přeprogramovat, ale zárověň se smaže obsah flash.
-
Je tam ATmega8A, pak ILX232D, pak nějakej stabilizátor napájení, krystal, rezistory a kondenzátory.
-
Vzhledem k situaci bych doporucil, aby jsi si koupil vlastni procesor a zkousel to na nem.
Toto reseni ma vyhody:
1. Potencionalne obejdes vsechny ochrany co dal do procesoru vyrobce (jestli tam nejaky dal)
2. Neznicis si stavebnici
3. Naucis se mnoho
Kdyz neuspejes, doporucoval bych s tim zajit za nekym zkusenejsim. Lide vice se motajici okolo tohoto se vyskytuji na mcu.cz, jinak urcite v kazdem meste bude nejaky bastlir....
-
Je tam ATmega8A, pak ILX232D, pak nějakej stabilizátor napájení, krystal, rezistory a kondenzátory.
-
Je tam ATmega8A, pak ILX232D, pak nějakej stabilizátor napájení, krystal, rezistory a kondenzátory.
pohnojeny prihlasovani...
v tom pripade je tam skutecne jen nejakej bootloader (podobne jako v arduinu), kterej prijma seriove data a uklada do flash. Potreboval by si nejaky externi programator (usbasp, stkxxx,... ), kterym ale premazes ten bootloader, takze by nebylo od veci zjistit, zda-li se da nekde k tomu vyrobku sehnat...
-
Takže, můžete mi prosím poslat odkaz na nějaký (levný) programátor, se kterým by se to tam dalo nahrát?
ISP programatoru jsou mraky. Zalezi, jestli jsi schopny si nejaky ubastlit nebo radeji koupis hotovy.
Potom je taky moznost sehnat nekoho, kdo ti to pujci. Pokud jsi nekde z okoli Brna nebo Blanska, tak muzu pomoct. Popripade kdyby ti fakt jina moznost nezbyvala a moc bys prosil a hezky koukal :) poslu ti jako sponzorsky dar mlademu bastlirovi tohle postou: https://plus.google.com/109540561880466469418/posts/ePBZwegyQqY - z jedne strany pripojis USB, z druhe budes mit ISP header.
Také mě napadlo, jestli by nebylo možné nějakým způsobem odposlouchávat tu komunikaci mezi tím Rogic a tím robotem a zjistit, jakým způsobem komunikují. Je toto možné?
Jasne, ze to jde, ale to je hodne vyssi divci a vyzaduje to nejaky vybaveni.
AVRka nemám nastudovaný detailně, ale předpokládám, že ty lockbity budou fungovat podobně jako u PICů, tam je možné je taky přeprogramovat, ale zárověň se smaže obsah flash.
Jo, mas pravdu. Tak bude muset tazatel doufat, ze zapnuty nejsou :)
-
nepiste proboha "POTENCIONALNE" nebo mi z toho mrdne...
-
Vzhledem k situaci bych doporucil, aby jsi si koupil vlastni procesor a zkousel to na nem.
To jo, to je vubec nejlepsi moznost, ale jenom pokud je tam DIP v patici, coz neni zrovna nejmodnejsi reseni :)
-
zlaty arduino... nicmene, tahle stavebnice bude podle me nejakej podobnej "klon" nebo tak... docela rad bych videl ten soft.
-
nepiste proboha "POTENCIONALNE" nebo mi z toho mrdne...
az budes tak starej jako ja, taky ti budou takovyhle veci fuk... teda jestli ti do ty doby z celyho desne neusporadanyho sveta nemr.ne. proboha
-
Spíš bych si koupil nějaký hotový programátor, kdyby mě to nějak zaujalo, tak bych si mohl zkusit udělat i ten, co jsi mi posílal. Pošleš mi teda nějaký odkaz na nějaký osvědčený e-shop?
-
jen tak nahodou: nemas ucet na eBay, co? tam jsem kupoval USBasp za 100,- i s postovnym a pouzivam ho porad.
-
Pošleš mi teda nějaký odkaz na nějaký osvědčený e-shop?
Z e-shopu bych nekupoval, zvlast ne z ceskyho, to bude zbytecne predrazeny.
Spis bych sel treba do tohodle: http://aukro.cz/avr-programator-usb-usbasp-usbisp-3-3v-5v-atmega8-i2939585052.html
(pokud by se ti tenhle nezdal, staci do vyhledavani na Aukru zadat "programator" a najde ti to jiny)
Pokud se ti nechce bastlit vubec, podivej se dobre i na to, kolik tam mas pinu.
Ale jeste si nerekl to nejpodstatnejsi - tu Atmegu mas v patici, nebo napevno zaletovanou do desky? Pokud v patici, tak si stoprocentne kup jinej chip a zkousej to na nem.
-
Je to cmos (plocha nizka placka) zaletovana do desky, a mam tam 6 pinu. Ale furt mi vrtá hlavou, jestli by se nedalo nějakym způsobem (softwarovym) zjistit jak ten Rogic funguje. Třeba ho dekompilovat nebo já nevim co...
-
A ještě bych se chtěl zeptat, jaký je rozdíl mezi ATmegou8 a ATmegou8A
-
pokud vim, tak "acka" jsou jen novejsi revize
a jak rikam: na stopro to je tak, ze tam ten ovladaci program na pc posila seriove data, ktery si bootloader v ty atMEGA ulozi do flashe... Jsem si tim na 99 procent jistej.
-
Je to cmos (plocha nizka placka) zaletovana do desky, a mam tam 6 pinu.
Hm, to se dalo cekat. To je blby.
Ale furt mi vrtá hlavou, jestli by se nedalo nějakym způsobem (softwarovym) zjistit jak ten Rogic funguje. Třeba ho dekompilovat nebo já nevim co...
Da se vsechno, akorat nektery cesty jsou asi tak milionkrat snazsi :)
Pokud tam nemas flash zamcenou proti cteni, tak pomoci toho programatoru si to v pohode vyctes a pak si tam nahrajes co budes chtit. Pokud zamcenej bude, tak mas na vyber - bud se da napsat vyrobci a ten sdeli presnejsi info, nebo nesdeli a pak mas na vyber se bud s tim Rogicem rozloucit a naveky uz nahravat program jinym zpusobem, nebo se rozhodnes do toho uz nestourat a smirit se s Rogicem :)
A ještě bych se chtěl zeptat, jaký je rozdíl mezi ATmegou8 a ATmegou8A
Takovy veci se resi googlem. Nasel bys tohle: http://www.atmel.com/Images/AVR523.pdf
Cili: z tvyho pohledu tam rozdil neni zadnej.