TODOPIC
Microcontroladores PIC => Programadores => Mensaje iniciado por: dewasha en 09 de Julio de 2011, 11:39:29
-
Hola buenas, Necesito saber que esta mal en este codigo ya que me da un error al compilarlo y no soi capaz de encontrarlo este es el error que me da el IDE pinguino:
C:\Users\Alex\Downloads\pinguino_beta9-05_windows\pinguino_beta9-05_windows\source\/user.c:1: syntax error: token -> 'source' ; column 11
Error mientras compila archivoC:\Users\Alex\Downloads\pinguino_beta9-05_windows\pinguino_beta9-05_windows\pinguino como replicador
view source
print?
001 // This is a tool to program the pinguino bootloader in a new chip
002 // with your Pinguino, the self replicating machine !!
003 // Jean-Pierre MANDON 2010
004 // Fixed bug 02/07/2011 PGM pin is no longer used
005
006 #define PGC 1 // connected to the PGC pin of the blank chip
007 #define PGD 2 // connected to the PGD pin of the blank chip
008 #define VPP 3 // connected to the VPP pin of the blank chip
009 #define VCC 6 // connected to the power on transistor
010 #define redled 5
011
012 uchar bulkerase[48] ={0x00,0x3C,0x0E,0x00,0xF8,0x6E,0x00,0x00,0x0E,0x00,0xF7,0x6E,0x00,0x05,0x0E,0x00,
013 0xF6,0x6E,0x0C,0x3F,0x3F,0x00,0x3C,0x0E,0x00,0xF8,0x6E,0x00,0x00,0x0E,0x00,0xF7,
014 0x6E,0x00,0x04,0x0E,0x00,0xF6,0x6E,0x0C,0x8F,0x8F,0x00,0x00,0x00,0x00,0x00,0x00};
015
016 uchar startwrite[24]={0x00,0xA6,0x8E,0x00,0xA6,0x9C,0x00,0x00,0x0E,0x00,0xF8,0x6E,0x00,0x00,0x0E,0x00,
017 0xF7,0x6E,0x00,0x00,0x0E,0x00,0xF6,0x6E};
018
019 uchar startwrid[24] ={0x00,0xA6,0x8E,0x00,0xA6,0x8C,0x00,0x30,0x0E,0x00,0xF8,0x6E,0x00,0x00,0x0E,0x00,
020 0xF7,0x6E,0x00,0x00,0x0E,0x00,0xF6,0x6E};
021 uchar checkmem[32];
022 uint address=0;
023
024 #define pic_on() digitalWrite(VCC,LOW)
025 #define pic_off() digitalWrite(VCC,HIGH)
026
027 // begin programming mode
028 // power is on ( VCC and Programing voltage )
029
030 void start_pgm()
031 {
032 digitalWrite(VPP,HIGH);
033 delayMicroseconds(4);
034 }
035
036 // end programming mode
037 // power is on ( VCC and Programing voltage )
038
039 void stop_pgm()
040 {
041 digitalWrite(PGD,LOW);
042 digitalWrite(PGC,LOW);
043 digitalWrite(VPP,LOW);
044 }
045
046 // send a command to the chip
047 // SPI soft
048
049 void send_command(uchar command,uchar lowbyte,uchar highbyte)
050 {
051 unsigned char i;
052 for (i=0;i<4;i++)
053 {
054 digitalWrite(PGC,HIGH);
055 if ((command&1)==1) digitalWrite(PGD,HIGH);
056 else digitalWrite(PGD,LOW);
057 digitalWrite(PGC,LOW);
058 command=command>>1;
059 }
060 for (i=0;i<8;i++)
061 {
062 digitalWrite(PGC,HIGH);
063 if ((lowbyte&1)==1) digitalWrite(PGD,HIGH);
064 else digitalWrite(PGD,LOW);
065 digitalWrite(PGC,LOW);
066 lowbyte=lowbyte>>1;
067 }
068 for (i=0;i<8;i++)
069 {
070 digitalWrite(PGC,HIGH);
071 if ((highbyte&1)==1) digitalWrite(PGD,HIGH);
072 else digitalWrite(PGD,LOW);
073 digitalWrite(PGC,LOW);
074 highbyte=highbyte>>1;
075 }
076 digitalWrite(PGC,LOW);
077 digitalWrite(PGD,LOW);
078 }
079
080 // special end of command write
081 // DS39622K Page 20 figure 3.5 (Flash Microcontroller Programming Specification)
082
083 void end_writecmd()
084 {
085 unsigned char i;
086 digitalWrite(PGD,LOW);
087 for (i=0;i<3;i++)
088 {
089 digitalWrite(PGC,HIGH);
090 digitalWrite(PGC,LOW);
091 }
092 digitalWrite(PGC,HIGH);
093 delay(6);
094 digitalWrite(PGC,LOW);
095 delayMicroseconds(500);
096 for (i=0;i<8;i++)
097 {
098 digitalWrite(PGC,HIGH);
099 digitalWrite(PGC,LOW);
100 }
101 for (i=0;i<8;i++)
102 {
103 digitalWrite(PGC,HIGH);
104 digitalWrite(PGC,LOW);
105 }
106 }
107
108 // Read Flash memory
109 // Pinguino examples Flash folder
110
111 uint ReadFlash(uint address)
112 {
113 uchar high8,low8;
114 TBLPTRU=0;
115 TBLPTRH=address>>8;
116 TBLPTRL=address;
117 __asm tblrd*+ __endasm;
118 low8=TABLAT;
119 __asm tblrd*+ __endasm;
120 high8=TABLAT;
121 return((high8<<8)+low8);
122 }
123
124 //-----------------------------------------------------------
125 // begining of the main loop
126 //-----------------------------------------------------------
127
128 void setup()
129 {
130 pinMode(PGC,OUTPUT);
131 digitalWrite(PGC,LOW);
132 pinMode(PGD,OUTPUT);
133 digitalWrite(PGD,LOW);
134 pinMode(VPP,OUTPUT);
135 digitalWrite(VPP,LOW);
136 pinMode(redled,OUTPUT);
137 digitalWrite(redled,LOW);
138 pinMode(VCC,OUTPUT);
139 digitalWrite(VCC,HIGH);
140 }
141
142 void loop()
143 {
144 int i;
145
146 // erase chip
147
148 pic_on();
149 delay(20);
150 start_pgm();
151 digitalWrite(redled,HIGH);
152 delay(10);
153 for (i=0;i<48;i+=3) send_command(bulkerase[i],bulkerase[i+1],bulkerase[i+2]);
154 delay(100);
155 stop_pgm();
156 delay(20);
157 pic_off();
158 delay(1000);
159
160 // read bootloader and write it
161
162 pic_on();
163 delay(1000);
164 start_pgm();
165 delay(10);
166 for (i=0;i<24;i+=3) send_command(startwrite[i],startwrite[i+1],startwrite[i+2]);
167 while (address<0x1FDF)
168 {
169 for (i=0;i<32;i++) checkmem[i]=ReadFlash(address+i);
170 for (i=0;i<30;i+=2) send_command(0b00001101,checkmem[i],checkmem[i+1]);
171 send_command(0b00001110,checkmem[30],checkmem[31]);
172 end_writecmd();
173 address+=32;
174 digitalWrite(redled,digitalRead(redled)^1);
175 delay(4);
176 }
177 digitalWrite(redled,HIGH);
178 for (i=0;i<32;i++) checkmem[i]=ReadFlash(address+i);
179 for (i=0;i<48;i+=3) send_command(startwrite[i],startwrite[i+1],startwrite[i+2]);
180 for (i=0;i<30;i+=2) send_command(0b00001101,checkmem[i],checkmem[i+1]);
181 send_command(0b00001111,checkmem[30],checkmem[31]);
182 end_writecmd();
183
184 // ---------- end copying bootloader
185
186 // programing configuration bits
187
188 for (i=0;i<24;i+=3) send_command(startwrid[i],startwrid[i+1],startwrid[i+2]);
189 send_command(0b00001111,0x24,0x24);
190 end_writecmd();
191 send_command(0,0x01,0x0E);
192 send_command(0,0xF6,0x6E);
193 send_command(0b00001111,0x0E,0x0E);
194 end_writecmd();
195 send_command(0,0x02,0x0E);
196 send_command(0,0xF6,0x6E);
197 send_command(0b00001111,0x3F,0x3F);
198 end_writecmd();
199 send_command(0,0x03,0x0E);
200 send_command(0,0xF6,0x6E);
201 send_command(0b00001111,0x1E,0x1E);
202 end_writecmd();
203 send_command(0,0x05,0x0E);
204 send_command(0,0xF6,0x6E);
205 send_command(0b00001111,0x81,0x81);
206 end_writecmd();
207 send_command(0,0x06,0x0E);
208 send_command(0,0xF6,0x6E);
209 send_command(0b00001111,0x81,0x81);
210 end_writecmd();
211 send_command(0,0x08,0x0E);
212 send_command(0,0xF6,0x6E);
213 send_command(0b00001111,0x0F,0x0F);
214 end_writecmd();
215 send_command(0,0x09,0x0E);
216 send_command(0,0xF6,0x6E);
217 send_command(0b00001111,0xC0,0xC0);
218 end_writecmd();
219 send_command(0,0x0A,0x0E);
220 send_command(0,0xF6,0x6E);
221 send_command(0b00001111,0x0F,0x0F);
222 end_writecmd();
223 send_command(0,0x0B,0x0E);
224 send_command(0,0xF6,0x6E);
225 send_command(0b00001111,0xA0,0xA0);
226 end_writecmd();
227 send_command(0,0x0C,0x0E);
228 send_command(0,0xF6,0x6E);
229 send_command(0b00001111,0x0F,0x0F);
230 end_writecmd();
231 send_command(0,0x0D,0x0E);
232 send_command(0,0xF6,0x6E);
233 send_command(0b00001111,0x40,0x40);
234 end_writecmd();
235
236 // ---------- end configuration bits
237
238 stop_pgm();
239 pic_off();
240
241 digitalWrite(redled,LOW);
242
243 while(1);
244 }
gracias por adelantado
-
he borrado el compilador y lo he vuelto a descomprimir del archivo zip en el que viene y ahora da un error diferente:
C:\Users\Alex\Downloads\pinguino_beta9-05_windows\pinguino_beta9-05_windows\source\/user.c:3: syntax error: token -> '002' ; column 3
Error mientras compila archivoC:\Users\Alex\Downloads\pinguino_beta9-05_windows\pinguino_beta9-05_windows/NoName0
el error parece estar en el archivo user.c3 pero ni lo he modificado yo ni creado ni nada no se por que esta mal
-
Si uso otro sketch funciona perfectamente solo da fallo cuando uso este codigo en concreto.
-
tan bien dispongo de la version original sin corregir el fallo(supuestamente por que sige sin funcionar en la version nueva):
// This is a tool to program the pinguino bootloader in a new chip
// with your Pinguino, the self replicating machine !!
// Jean-Pierre MANDON 2010
#define PGC 1 // connected to the PGC pin of the blank chip
#define PGD 2 // connected to the PGD pin of the blank chip
#define VPP 3 // connected to the VPP pin of the blank chip
#define VCC 6 // connected to the power on transistor
#define redled 5
uchar bulkerase[48] ={0x00,0x3C,0x0E,0x00,0xF8,0x6E,0x00,0x00,0x0E,0x00,0xF7,0x6E,0x00,0x05,0x0E,0x00,
0xF6,0x6E,0x0C,0x3F,0x3F,0x00,0x3C,0x0E,0x00,0xF8,0x6E,0x00,0x00,0x0E,0x00,0xF7,
0x6E,0x00,0x04,0x0E,0x00,0xF6,0x6E,0x0C,0x8F,0x8F,0x00,0x00,0x00,0x00,0x00,0x00};
uchar startwrite[24]={0x00,0xA6,0x8E,0x00,0xA6,0x9C,0x00,0x00,0x0E,0x00,0xF8,0x6E,0x00,0x00,0x0E,0x00,
0xF7,0x6E,0x00,0x00,0x0E,0x00,0xF6,0x6E};
uchar startwrid[24] ={0x00,0xA6,0x8E,0x00,0xA6,0x8C,0x00,0x30,0x0E,0x00,0xF8,0x6E,0x00,0x00,0x0E,0x00,
0xF7,0x6E,0x00,0x00,0x0E,0x00,0xF6,0x6E};
uchar checkmem[32];
uint address=0;
#define pic_on() digitalWrite(VCC,LOW)
#define pic_off() digitalWrite(VCC,HIGH)
// begin programming mode
// power is on ( VCC and Programing voltage )
void start_pgm()
{
digitalWrite(VPP,HIGH);
delayMicroseconds(4);
}
// end programming mode
// power is on ( VCC and Programing voltage )
void stop_pgm()
{
digitalWrite(PGD,LOW);
digitalWrite(PGC,LOW);
digitalWrite(PGM,LOW);
digitalWrite(VPP,LOW);
}
// send a command to the chip
// SPI soft
void send_command(uchar command,uchar lowbyte,uchar highbyte)
{
unsigned char i;
for (i=0;i<4;i++)
{
digitalWrite(PGC,HIGH);
if ((command&1)==1) digitalWrite(PGD,HIGH);
else digitalWrite(PGD,LOW);
digitalWrite(PGC,LOW);
command=command>>1;
}
for (i=0;i<8;i++)
{
digitalWrite(PGC,HIGH);
if ((lowbyte&1)==1) digitalWrite(PGD,HIGH);
else digitalWrite(PGD,LOW);
digitalWrite(PGC,LOW);
lowbyte=lowbyte>>1;
}
for (i=0;i<8;i++)
{
digitalWrite(PGC,HIGH);
if ((highbyte&1)==1) digitalWrite(PGD,HIGH);
else digitalWrite(PGD,LOW);
digitalWrite(PGC,LOW);
highbyte=highbyte>>1;
}
digitalWrite(PGC,LOW);
digitalWrite(PGD,LOW);
}
// special end of command write
// DS39622K Page 20 figure 3.5 (Flash Microcontroller Programming Specification)
void end_writecmd()
{
unsigned char i;
digitalWrite(PGD,LOW);
for (i=0;i<3;i++)
{
digitalWrite(PGC,HIGH);
digitalWrite(PGC,LOW);
}
digitalWrite(PGC,HIGH);
delay(6);
digitalWrite(PGC,LOW);
delayMicroseconds(500);
for (i=0;i<8;i++)
{
digitalWrite(PGC,HIGH);
digitalWrite(PGC,LOW);
}
for (i=0;i<8;i++)
{
digitalWrite(PGC,HIGH);
digitalWrite(PGC,LOW);
}
}
// Read Flash memory
// Pinguino examples Flash folder
uint ReadFlash(uint address)
{
uchar high8,low8;
TBLPTRU=0;
TBLPTRH=address>>8;
TBLPTRL=address;
__asm tblrd*+ __endasm;
low8=TABLAT;
__asm tblrd*+ __endasm;
high8=TABLAT;
return((high8<<8)+low8);
}
//-----------------------------------------------------------
// begining of the main loop
//-----------------------------------------------------------
void setup()
{
pinMode(PGM,OUTPUT);
digitalWrite(PGM,LOW);
pinMode(PGD,OUTPUT);
digitalWrite(PGD,LOW);
pinMode(VPP,OUTPUT);
digitalWrite(VPP,LOW);
pinMode(redled,OUTPUT);
digitalWrite(redled,LOW);
pinMode(VCC,OUTPUT);
digitalWrite(VCC,HIGH);
}
void loop()
{
int i;
// erase chip
pic_on();
delay(20);
start_pgm();
digitalWrite(redled,HIGH);
delay(10);
for (i=0;i<48;i+=3) send_command(bulkerase[i],bulkerase[i+1],bulkerase[i+2]);
delay(100);
stop_pgm();
delay(20);
pic_off();
delay(1000);
// read bootloader and write it
pic_on();
delay(1000);
start_pgm();
delay(10);
for (i=0;i<24;i+=3) send_command(startwrite[i],startwrite[i+1],startwrite[i+2]);
while (address<0x1FDF)
{
for (i=0;i<32;i++) checkmem[i]=ReadFlash(address+i);
for (i=0;i<30;i+=2) send_command(0b00001101,checkmem[i],checkmem[i+1]);
send_command(0b00001110,checkmem[30],checkmem[31]);
end_writecmd();
address+=32;
digitalWrite(redled,digitalRead(redled)^1);
delay(4);
}
digitalWrite(redled,HIGH);
for (i=0;i<32;i++) checkmem[i]=ReadFlash(address+i);
for (i=0;i<48;i+=3) send_command(startwrite[i],startwrite[i+1],startwrite[i+2]);
for (i=0;i<30;i+=2) send_command(0b00001101,checkmem[i],checkmem[i+1]);
send_command(0b00001111,checkmem[30],checkmem[31]);
end_writecmd();
// ---------- end copying bootloader
// programing configuration bits
for (i=0;i<24;i+=3) send_command(startwrid[i],startwrid[i+1],startwrid[i+2]);
send_command(0b00001111,0x24,0x24);
end_writecmd();
send_command(0,0x01,0x0E);
send_command(0,0xF6,0x6E);
send_command(0b00001111,0x0E,0x0E);
end_writecmd();
send_command(0,0x02,0x0E);
send_command(0,0xF6,0x6E);
send_command(0b00001111,0x3F,0x3F);
end_writecmd();
send_command(0,0x03,0x0E);
send_command(0,0xF6,0x6E);
send_command(0b00001111,0x1E,0x1E);
end_writecmd();
send_command(0,0x05,0x0E);
send_command(0,0xF6,0x6E);
send_command(0b00001111,0x81,0x81);
end_writecmd();
send_command(0,0x06,0x0E);
send_command(0,0xF6,0x6E);
send_command(0b00001111,0x81,0x81);
end_writecmd();
send_command(0,0x08,0x0E);
send_command(0,0xF6,0x6E);
send_command(0b00001111,0x0F,0x0F);
end_writecmd();
send_command(0,0x09,0x0E);
send_command(0,0xF6,0x6E);
send_command(0b00001111,0xC0,0xC0);
end_writecmd();
send_command(0,0x0A,0x0E);
send_command(0,0xF6,0x6E);
send_command(0b00001111,0x0F,0x0F);
end_writecmd();
send_command(0,0x0B,0x0E);
send_command(0,0xF6,0x6E);
send_command(0b00001111,0xA0,0xA0);
end_writecmd();
send_command(0,0x0C,0x0E);
send_command(0,0xF6,0x6E);
send_command(0b00001111,0x0F,0x0F);
end_writecmd();
send_command(0,0x0D,0x0E);
send_command(0,0xF6,0x6E);
send_command(0b00001111,0x40,0x40);
end_writecmd();
// ---------- end configuration bits
stop_pgm();
pic_off();
digitalWrite(redled,LOW);
while(1);
}
si ejecuto este sketch en vez del supuesto corregido el fallo de la variable PGM este es el error que me daba:
C:\Users\Alex\Downloads\pinguino_beta9-05_windows\pinguino_beta9-05_windows\source\/user.c:50: error 20: Undefined identifier 'PGM'
C:\Users\Alex\Downloads\pinguino_beta9-05_windows\pinguino_beta9-05_windows\source\/user.c:147: error 20: Undefined identifier 'PGM'
C:\Users\Alex\Downloads\pinguino_beta9-05_windows\pinguino_beta9-05_windows\source\/user.c:148: error 20: Undefined identifier 'PGM'
C:\Users\Alex\Downloads\pinguino_beta9-05_windows\pinguino_beta9-05_windows\source\main.c:96: warning 197: keyword 'interrupt' is deprecated, use '__interrupt' instead
C:\Users\Alex\Downloads\pinguino_beta9-05_windows\pinguino_beta9-05_windows\source\main.c:140: warning 197: keyword 'interrupt' is deprecated, use '__interrupt' instead
Error mientras compila archivoC:\Users\Alex\Downloads\pinguino_beta9-05_windows\pinguino_beta9-05_windows/NoName0
la variable PGM supuestamente ya no se usa pero si no se declara pues da estos errores entoces nose como sustituirla sin fastidiar el codigo
-
este es el esquema del harware que se usa para clonar el bootloader del pic aver si os sirve para guiarse, creo que la variable PGM ya no se usa por que ahora el voltaje de programacion (+12v) lo proporciona externamente y ya no se necesita esa variable. pero mejor que lo digáis vosotros.
(http://1.bp.blogspot.com/_R49Ujm5KVjw/THjg9qisJHI/AAAAAAAAAzU/CLgdibBkZoI/s1600/selfprogrammer.png)
-
Hola dewasha, por favor no repita los mismo problema en el foro, y no espere nunca que nadie te conteste tan rapido, aparte que ese programador por lo que veo poca gente lo conoce, sino sabe las reglas del foro mejor que vaya leyendo http://www.todopic.com.ar/foros/index.php?action=globalAnnouncements;id=1
Saludos ;-)
-
han sido 2 preguntas diferentes...si te fijas una trata de un error en codigo y otro sobre como modificar un bootloader que creo que no tiene nada que ver...