Show Posts
Pages: 1 2 [3] 4 5 ... 52
31  International / Generale / Re: lcd che si blocca on: October 30, 2013, 04:57:23 pm
Quote
@tonid : Ti consiglio di dare una letta a QUESTO articolo di Leo che spiega come usare la millis() e ... un trucco per evitare proprio l'overflow
Grazie anche a te Guglielmo,conosco bene l'articolo di Leo,non essendo una cima a programmare faccio molta fatica ad interpretare gli sketch scritti da altri,diverso è se li devo scrivere io,faccio molta attenzione alle variabili da scegliere in funzione di ciò che devono contenere proprio perchè molte volte i problemi si possono nascondere dietro queste piccole cose e diventano difficili da individuare per chi non mastica bene smiley-grin.
Ciao
32  International / Generale / Re: lcd che si blocca[Risolto] on: October 30, 2013, 04:35:40 pm
Grazie superlol,mentre mi hai scritto stavo facendo delle prove con il serial monitor e la memory free ed effettivamente non c'erano problemi di ram........
Il discorso della variabile "int previous_time" mi era proprio sfuggito........questo è il copia e incolla smiley-roll-blue
Solitamente quando uso la millis uso sempre una unsigned long e se prevedo che il dispositivo debba restare acceso per più di 49 giorni faccio un controllo del valore e se superiore a un tot con una if  riazzero il contatore.
Comunque mentre scrivevo sono passati più di 30 secondi circa e tutto ora funziona,GRAZIE smiley-wink

edit
Grazie dell'ottima spiegazione
33  International / Generale / Re: lcd che si blocca on: October 30, 2013, 03:18:24 pm
Allora nel frattempo ho decommentato tutto ciò che riguarda l'utilizzo dell'LCD perchè pensavo potesse dipendere da esso ma non ho risolto. Continua ad andare in blocco dopo un tot di pressioni dei pulsanti...
Dando per scontato che il problema sia l'esaurimento della RAM dell'Atmega sto cercando di capire da dove deriva
Code:
const int speed_ticks[] = {-1, 600, 300, 200, 150, 120, 100, 86, 75, 67, 60, 55, 50, 46, 43};
e mi domando quanto occupa questa ???
34  International / Generale / lcd che si blocca[Risolto] on: October 30, 2013, 01:10:08 pm
Ciao a tutti,dopo tanto tempo finalmente torno a giocare ma ho incontrato subito un problema,l'LCD si blocca e non riesco a risolvere il problema.. smiley-twist
Lo sketch in allegato l'ho preso in rete
Code:
#include <LiquidCrystal.h>
#include <TimerOne.h>

// buttons code
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

// directions
#define FORWARD   HIGH
#define BACKWARD  LOW

// debounce time (milliseconds)
#define DEBOUNCE_TIME  200

// PINs for Pololu controller
#define PIN_STEP  2
#define PIN_DIR   3

// lookup table speed - ticks (interrupts)
const int speed_ticks[] = {-1, 600, 300, 200, 150, 120, 100, 86, 75, 67, 60, 55, 50, 46, 43};

// global variables
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //rs,enable,D4,D5,D6,D7

int actual_speed;
int actual_direction;

int ticks;
int tick_count;

int button;
boolean debounce;
int previous_time;

// custom LCD square symbol for progress bar
byte square_symbol[8] = {
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
};

// string constants
char forward_arrow[] = "-->";
char backward_arrow[] = "<--";

void setup() {

  // init the timer1, interrupt every 0.1ms
  Timer1.initialize(100);
  Timer1.attachInterrupt(timerIsr);
  
  // init LCD and custom symbol  
  lcd.begin(20, 4);
  lcd.setCursor(0,0);
  lcd.createChar(0, square_symbol);
  
  // pins direction
  pinMode(PIN_STEP, OUTPUT);
  pinMode(PIN_DIR, OUTPUT);
  
  // initial values
  actual_speed = 0;
  actual_direction = FORWARD;
  tick_count = 0;
  ticks = -1;
  debounce = false;

  digitalWrite(PIN_DIR, actual_direction);  
  updateLCD();
}
  
void loop() {
  
  // check if debounce active
  if(debounce) {
    button = btnNONE;
    if(millis() > previous_time + DEBOUNCE_TIME) debounce = false;
  } else button = read_buttons();
  
  // if a button is pressed, start debounce time
  if(button != btnNONE) {
    
    previous_time = millis();
    debounce = true;  
  }
    
  // check which button was pressed
  switch(button) {
    
    case btnUP:
      increase_speed();
      break;
    case btnDOWN:
      decrease_speed();
      break;
    case btnLEFT:
      change_direction(BACKWARD);
      break;
    case btnRIGHT:
      change_direction(FORWARD);
      break;
    case btnSELECT:
      emergency_stop();
      break;
  }
  
  // finally update the LCD
  updateLCD();
}

// increase speed if it's below the max (70)
void increase_speed() {
  
  if(actual_speed < 70) {
    actual_speed += 5;
    tick_count = 0;
    ticks = speed_ticks[actual_speed / 5];
  }
}

// decrease speed if it's above the min (0)
void decrease_speed() {
  
  if(actual_speed > 0) {
    actual_speed -= 5;
    tick_count = 0;
    ticks = speed_ticks[actual_speed / 5];
  }
}

// change direction if needed
void change_direction(int new_direction) {
  
  if(actual_direction != new_direction) {
    actual_direction = new_direction;
    digitalWrite(PIN_DIR, actual_direction);
  }
}

// emergency stop: speed 0
void emergency_stop() {
  actual_speed = 0;
  tick_count = 0;
  ticks = speed_ticks[actual_speed / 5];
}

// update LCD
void updateLCD() {
  
  // print first line:
  // Speed: xxxRPM --> (or <--)
  lcd.setCursor(0,0);
  lcd.print("Speed: ");
  lcd.print(actual_speed);
  lcd.print("RPM ");

  lcd.setCursor(13,0);
  if(actual_direction == FORWARD) lcd.print(forward_arrow);
  else lcd.print(backward_arrow);
  
  // print second line:
  // progress bar [#####         ]
  // 15 speed steps: 0 - 5 - 10 - ... - 70
  lcd.setCursor(0,1);
  lcd.print("[");
  
  for(int i = 1; i <= 14; i++) {
    
    if(actual_speed > (5 * i) - 1) lcd.write(byte(0));
    else lcd.print(" ");
  }
  
  lcd.print("]");
}

// timer1 interrupt function
void timerIsr() {

  if(actual_speed == 0) return;
  
  tick_count++;
  
  if(tick_count == ticks) {  
    
    // make a step
    digitalWrite(PIN_STEP, HIGH);
    digitalWrite(PIN_STEP, LOW);
    
    tick_count = 0;
  }
}

// read buttons connected to a single analog pin
int read_buttons() {
  
 int adc_key_in = analogRead(0);
 
 if (adc_key_in > 1000) return btnNONE;
 if (adc_key_in < 50)   return btnRIGHT;  
 if (adc_key_in < 195)  return btnUP;
 if (adc_key_in < 380)  return btnDOWN;
 if (adc_key_in < 555)  return btnLEFT;
 if (adc_key_in < 790)  return btnSELECT;  
}

E' un comando per motori stepper e dovrebbe visualizzare velocità in RPM ,senso di rotazione ed inoltre la velocità è espressa anche da una barra progressiva.........Funziona tutto ma ,se pigio i pulsanti ripetutamente,dopo un numero preciso di pressioni, si inchioda l'LCD.
Credo sia un problema di memoria del display ma non mi è mai capitato................
Sapete darmi qualche consiglio??
Ciao a tutti.

edit
Non è solo l'LCD che si blocca ma anche il micro
35  International / Hardware / Re: programmare il 644 ... ma come???? on: June 08, 2013, 01:23:18 am
Ciao,dovrebbe funzionare tutto regolarmente,a questo punto penso che i pin si possano essere danneggiati in qualche maniera.
A me ,sinceramente ,non è mai capitata una cosa simile.
36  International / Hardware / Re: programmare il 644 ... ma come???? on: June 07, 2013, 02:11:12 pm
Ciao,dovresti dare un po più di informazioni..
Come avrai letti nel topic non a tutti carica gli sketch in seriale,tu come lo hai collegato?
Quindi hai caricato il BL in ISP e poi in seriale hai caricato il blink e tutto ha funzionato,poi hai provato a caricare un'altro sketch,sempre in seriale,che doveva fare dei blink sui pin 24/25/26 ed invece non ha funzionato..Ma l'ide che messaggi ti ha dato?
Più cose spieghi e più è semplice capire ed aiutarti smiley-wink
Ciao
37  International / Software / Re: Contribuiamo alla cinematografia on: June 07, 2013, 01:25:03 am
Oggi vado a ritirare l'accelerometro.....provo lo sketch e ti dico,ciao.
38  International / Software / Re: Contribuiamo alla cinematografia on: May 30, 2013, 03:17:49 pm
Quote
Ho comprato su electrodragon, ha molta roba carina a basso costo.
Grazie,gli butto un'occhio.
Quote
Ora devo vedere di creare il supporto per i servi
Eh,fino a non molto tempo fa questo genere di lavori mi dava rabbia perchè sono amante della precisione e fare a mano ed in maniera precisa è difficile.......ora però mi sono attrezzato con una cnc e diversi SW e solitamente faccio queste cosette in plexy ed il risultato diventa anche carino smiley
 
39  International / Software / Re: Contribuiamo alla cinematografia on: May 30, 2013, 06:14:13 am
Quote
la prossima versiona del software dico già che potrà modificare anche la rotazione della yaw ovvero sull'asse y, la questione è che per ora volevo solo fare un sistema di stabilizzazione roll-tilt mentre per l'asse y usare delle semplici corde (il tutto vorrei montarlo su un camera jib).

un prossimo progetto sarà un dolly motorizzato che prima registrerà i movimenti e dopo averli salvati su sd potra tornare alla posizione iniziale e ripeterli, inotlre il salvataggio su sd dovrebbe permettere anche la modifica tramite pc o smartphone o tablet di questi movimenti.
però voglio procedere un passo alla volta anche perchè in questo secondo progetto dovrei usare degli stepper ed anche encoder rotativi, tutti il più preciso possibile, già l'uso dei servi per quest'attuale applicazione non mi pare una scelta molto "stabile" e precisa (senza usare motoriduttori ovviamente).
Vedo che anche tu come me mentre ne fai una ne pensi ad altre 100,sarà perchè sono anche io così ma condivido lo spirito !! smiley-mr-green
Tornando al serio,stiamo portando avanti due progetti diversi ma che nello stesso tempo trovano ,secondo me,molti elementi comuni .
E' interessante il discorso dei dati modificabili,una volta salvati, sull'SD.
Quote
il tuo è fattibile però così ad occhio io ripiegherei su un'arduino mega così da poter avere accesso a tutto.
Si,infatti pensavo di utilizzare dei 2560 attorno al quale mettere il necessario,l'idea era di fare più o meno una board che mi permettesse anche di prototipare ma è ovviamente una cosa da prendere con il giusto peso e devo quindi finire prima ciò che ho in cantiere.
Quote
io ho comprato una scheda con questi 2 sensori più un magnetormetro hmc5843 a circa 30$
Io mi sono affidato al mio negoziante di fiducia nella ricerca ma non credo assolutissimamente che mi faccia spendere tale cifra,hai un link,non mi dispiacerebbe affatto risparmiare qualcosa smiley-money
Quote
fammi sapere e condividi il tuo lavoro poi
Appena finisco meccanica e schede ti mando qualche foto,per il sw non sono un esperto,anzi,ci vorrà quindi un lungo tempo di sacrificio e sofferenza ma ci arriverò,ho la capa tosta smiley-twist
Ciao
40  International / Software / Re: Contribuiamo alla cinematografia on: May 28, 2013, 11:56:39 pm
Ciao superlol,ho scaricato il tuo lavoro ma non posso provarlo in quanto non ho i moduli,li ho ordinati ed appena mi arrivano ti dirò volentieri come funge  smiley
Io in questi ultimi 4/5 mesi sto lavorando su dei progetti di animatronica ,alcuni prevedono l'uso dei servo pilotati però dai telecomandi da modellismo che sono dei visi meccanici con tutti i movimenti tipici di un essere umano(occhi,palpebre,sopracciglia,labbra,tempie,labbra,ecc..)sul quale vengono poi applicate delle maschere siliconiche create da specifico disegno del personaggio mentre altri sono puramente meccanici quali ad esempio estensioni degli arti quali braccia con mani le cui dita si muovono comandate direttamente dalle dita di chi indossa "l'estensione".
Sto andando giù di CNC a fare tutti i pezzi,sto diventando matto ma mi sto divertendo un sacco smiley
In questo appena detto non c'è arduino ma avevo intenzione di mettere a punto un sistemino che mi permettesse di gestire tutti i servi memorizzando delle espressioni del viso, ed una volta fatto,far partire in sequenza tutte le espressioni memorizzate creando così una vera e propria animazione pre impostata.
Non ho ancora riflettuto molto sulla cosa per mancanza di tempo ma credo sia fattibile usando ad esempio dei TLC5940 e delle memorie esterne ad arduino,qualche potenziometro da usare per regolare la velocità del cambio di espressione ecc...
Questa premessa è stata obbligatoria per dirti che il tuo lavoro è interessante e che se posso esserti utile ci sono  smiley-wink
Ciao

ps. sto lavorando anche su dei micro motori (9mm di lunghezza x 3mm di diametro)accoppiati ad una vite senza fine che ti permettono di avere una corsa di 10 mm sotto la quale ci sono montati dei contatti a scorrimento, ho fatto un piccolo pcb a due layer con su montato il motore e un ponte h a transistor smd ed ho creato un encoder (sfruttando i contatti di prima)che uso per sapere la sua posizione.   
41  International / Software / Re: Frequenzimetro Digitale con micro ATMEL - FINITO - on: May 26, 2013, 02:06:59 am
Complimenti Michele,come al solito un bel lavoro!  smiley-wink
Aspetterò l'uscita dell'articolo,ciao.
42  International / Software / Re: [Risolto]ATMega328P-AU TQFP32 .......ADC6 e ADC7 ? on: May 24, 2013, 12:48:36 am
Quote
Se il tuo chip lavora a 16 MHz sì, puoi lasciare l'Optiboot dell'Arduino Uno.
Ok,visto che lo userò a 16MHz,mi faccio una nuova board di testo con la modifica nelle variants come detto prima e la chiamo 328p smd,così me la ritrovo smiley-wink
43  International / Software / Re: [Risolto]ATMega328P-AU TQFP32 .......ADC6 e ADC7 ? on: May 23, 2013, 03:55:40 pm
Ciao,ho visto adesso i vostri reply (Paolo e Leo).
Quindi se ho capito bene per fare in modo che i due pin vengano configurati correttamente devo semplicemente cambiare la cartella da attribuire a "variants" da standard a eightanaloginputs nelle boards di testo,se faccio una board apposita posso mantenere anche l'optiboot che si usa sulla uno,ho visto che con il Nano o il Micro il bootloader è un'altro,va comunque bene?
44  International / Software / Re:[Risolto] ATMega328P-AU TQFP32 .......ADC6 e ADC7 ? on: May 22, 2013, 04:41:36 am
Ok ragazzi,grazie a tutti delle info.
Buona continuazione  smiley-wink
45  International / Software / Re: ATMega328P-AU TQFP32 .......ADC6 e ADC7 ? on: May 22, 2013, 04:27:03 am
@flz
Si,so del multiplexer,intendevo che c'erano due pin in più,comunque grazie della puntualizzazione smiley
@PaoloP
Non conoscevo questa cosa.....interessante,approfondirò
@Astro
Ok,grazie....mi giravano le scatole fare una schedina apposta solo per capire smiley-cool

Quindi,se volessi usare questi ulteriori pin analogici come digitali,basterà dichiararli come pinMode(20,OUTPUT) per il pin A6 e pinMode(21,OUTPUT) per il pin A7?

Ciao
Pages: 1 2 [3] 4 5 ... 52