Go Down

Topic: Aiuto per compilazione STK500boot.c (Read 6 times) previous topic - next topic

Giorgio

uh che casino:

non basta fare una cosa tipo:
#define BOTTONE PINA0

e poi usare gli
IF (BOTTONE   &=   ~(1<<BOTTONE))   // condizione bottone low
IF (BOTTONE   |=   (1<<BOTTONE))   // condizione bottone high

è sbagliato?


leo72


Testato

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Giorgio


lesto

prima di tutto devi settare il pin come input

poi leggi se il pin è 0 o 1

poi fai quello che devi fare.

cerca "port manipulation" sul playground!
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

astrobeed

Ecco la modifica pronta all'uso (testata).
Non mi è chiaro come usi il pulsante perché dici che hai le pullup e che chiude verso Vdd, in questo caso ci deve essere una pull down.
Comunque non è un problema basta che nella if metti il confronto verso 0 logico oppure 1 logico a seconda di come chiude il pulsante.
Io ho impostato che per attivare il bootloader il pin PA0 deve essere a stato logico 1 come dovrebbe essere per la configurazione che hai descritto.
Attenzione che dopo aver caricato il nuovo bootloader non vedrai nessun led lampeggiare perché non trovando il pulsante premuto viene ceduto subito il controllo al programma utente che non c'è, quindi apparentemente il processore sembra non fare nulla.

Code: [Select]


// codice da inserire subito prima della while (boot_state)
// Setto PA0 come input
DDRA = 0b00000000;
// Attivo pullup interna up su PA0 (usato per il test)
// PORTA = 0b00000001; 

  if ((PINA & 0b00000001) == 1) // inserire la condizione logica desiderata (1 o 0)
   {
while (boot_state==0)
{
while ((!(Serial_Available())) && (boot_state == 0)) // wait for data
{
_delay_ms(0.001);
boot_timer++;
if (boot_timer > boot_timeout)
{
boot_state = 1; // (after ++ -> boot_state=2 bootloader timeout, jump to main 0x00000 )
}
#ifdef BLINK_LED_WHILE_WAITING
if ((boot_timer % 7000) == 0)
{
//* toggle the LED
PROGLED_PORT ^= (1<<PROGLED_PIN); // turn LED ON
}
#endif
}
boot_state++; // ( if boot_state=1 bootloader received byte from UART, enter bootloader mode)
}
   }
  else boot_state = 0;


Giorgio

Grazie astrobeed,
compilandolo ho una sfilza di
Code: [Select]
error: stray '/240' in program
credo sia un problema di codifica,cosa devo fare?

Giorgio

#142
May 28, 2012, 03:50 pm Last Edit: May 28, 2012, 04:21 pm by Giorgio Reason: 1
Risolto ho eliminato tutti gli spazi.. ora provo :)

EDIT:
ho provato: funziona molto bene... bisogna tener premuto il pulsante per caricare lo sketch sui moduli..ma funziona :)

lesto

metti un pulsante on/off e risolvi il problema di teenre premuto, però poi non lamentarti se lo lasci acceso e si blocca di nuovo :)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up