Show Posts
Pages: 1 [2] 3 4
16  International / Software / Doppio dimmer con attiny85 e triac on: October 20, 2012, 11:37:53 pm
Salve ragazzi,
come da titolo, sto cercando di realizzare un doppio dimmer (2 dimmer separati, ma con un unico micro), a 230v...

ho preso spunto da questo... http://wiki.dxarts.washington.edu/groups/general/wiki/4dd69/AC_Dimmer_Circuit.html

solo che ho un problemino con la libreria timer1 sul tiny85...
uso il tiny85 come descritto qui: http://hlt.media.mit.edu/?p=1695

ho anche provato le librerie timedaction, e timer (che da quanto ho letto è derivata da timedaction), ma non mi funziona...
ho bisogno di 2 processi sotto timer, indipendenti, lasciando invariato il loop, ed i delay/millis.

sul datasheet del tiny85, ho letto che internamente ci sono 2 timer ciascuno con 2 compare_match.

ora, vi chiedo: è possibile usare uno di questi timer usando sia il COMPA, che il COMPB?

potreste per favore scrivermi un esempio di codice?

P.S. il circuito, è molto simile a quello del progetto postato, ho solo aggiunto un ponte di diodi prima della resistenza da 33k che va al fototransistor, ed ho utilizzato il pilotaggio del triac con una sola resistenza (per carichi resistivi, è sufficiente).

Grazie a tutti smiley-wink
17  International / Generale / Re: Shifting IN e Shifting OUT [Sto impazzendo!] on: June 07, 2012, 06:45:29 am
beh problemi di cablaggio non credo...
comunque grazie di tutto
18  International / Generale / Re: Shifting IN e Shifting OUT [Sto impazzendo!] on: June 06, 2012, 04:31:05 am
@leo, anch'io credo sia un problema di bounce, grazie della risposta, proverò...

per quanto riguarda il cd4021 il p7 nella funzione getbit, ha come indice 0, il p6 ha indice 1, il p1 ha indice 6, il p8 che indice avrà? 7? non ho provato perchè in entrambi gli shift l'ho cortocircuitato col gnd, in quanto non lo uso, ma era per un chiarimento...
19  International / Generale / Re: Shifting IN e Shifting OUT [Sto impazzendo!] on: June 06, 2012, 02:40:51 am
c'è una corrispondenza, ma i button mi servono anche per altro...

comunque, finalmente sono riuscito a far funzionare gli shiftin, anche se non mi spiego 2 cose
1) perchè l'ingresso 6 (piedino n°15) del 4021, ha come indice 0? l'ingresso 7 (piedino 1) che indice avrà?
2) perchè cliccando i pulsanti, a volte è come se non li clicchi, ovvero non viene registrato il passaggio di stato?

ecco il code:
Code:
boolean getBit(byte myVarIn, byte whatBit) {
  boolean bitState;
  bitState = myVarIn & (1 << whatBit);
  return bitState;
}
Code:
void readshiftin() {
  digitalWrite(latchin,1);
  delayMicroseconds(20);
    digitalWrite(latchin,0);
 shiftin1 = shiftIn(datain, clockin);
  shiftin2 = shiftIn(datain, clockin);
 if (getBit(shiftin1, 6)) {
   block3=false;
  }
  if (getBit(shiftin1, 5)) {
   block2=false;
  }
  if (getBit(shiftin1, 4)) {
   block1=false;
  }
  if (getBit(shiftin1, 3)) {
  if (block3==false && manual==true){
    if (start3 == true){
      start3=false;
      }else{
        start3=true;
        }
        }else {
          start3=false;
          }
  }
  if (getBit(shiftin1, 2)) {
   if (block2==false && manual==true){
    if (start2 == true){
      start2=false;
      }else{
        start2=true;
        }
        }else {
          start2=false;
          }
  }
  if (getBit(shiftin1, 1)) {
    if (block1==false && manual==true){
    if (start1 == true){
      start1=false;
      }else{
        start1=true;
        }
        }else {
          start1=false;
          }
  }
  if (getBit(shiftin1, 0)) {
   if (manual == true){
      manual=false;
      start1=false;
      start2=false;
      start3=false;
      digitalWrite(m1, LOW);
      digitalWrite(m2, LOW);
      digitalWrite(m3, LOW);
      }else{
        manual=true;
        }
  }
delay(20);
}

ciao
UP2
20  International / Generale / Re: Shifting IN e Shifting OUT [Sto impazzendo!] on: June 05, 2012, 11:47:24 pm
@leo e dalubar, molte grazie, adesso ho capito tutto smiley
@dalubar sapevo che il primo bit inviato va all'ultima uscita dell'ultimo shift =)

comunque, resta il problema per gli shiftin, i codici che ho usato sono questi:
code1 (basato su questo http://arduino.cc/en/Tutorial/ShftIn12)
Code:
digitalWrite(latchin,1);
  delayMicroseconds(20);
    digitalWrite(latchin,0);
shiftin1 = shiftIn(datain, clockin);
  shiftin2 = shiftIn(datain, clockin);
for (int n=0; n<=7; n++)
  {
  
    if (shiftin1 & (1 << n) ){
     switch(n){
    case 0:
    block3=false;
    break;
    case 1:
    block2=false;
    break;
    case 2:
    block1=false;
    break;
    case 3:
    if (block3==false && manual==true){
    if (start3 == true){
      start3=false;
      }else{
        start3=true;
        }
        }else {
          start3=false;
          }
          break;
          case 4:
          if (block2==false && manual==true){
    if (start2 == true){
      start2=false;
      }else{
        start2=true;
        }
        }else {
          start2=false;
          }
          break;
          case 5:
          if (block1==false && manual==true){
    if (start1 == true){
      start1=false;
      }else{
        start1=true;
        }
        }else {
          start1=false;
          }
          break;
          case 6:
        
    if (manual == true){
      manual=false;
      }else{
        manual=true;
        }
          break;
    }
    }
  }
  for (int n=0; n<=7; n++)
  {
    //so, when n is 3, it compares the bits
    //in switchVar1 and the binary number 00001000
    //which will only return true if there is a
    //1 in that bit (ie that pin) from the shift
    //register.
    if (shiftin2 & (1 << n) ){
      //print the value of the array location
      //Serial.println(note2sing[n]);
    }
  }
  
  delay(500);

poi ho provato con questo:
Code:
for (int x=15; x >=0; x--){
    digitalWrite(clockin,LOW);
    if (digitalRead(datain)==HIGH) {
  switch(x){
    case 0:
    block3=false;
    break;
    case 1:
    block2=false;
    break;
    case 2:
    block1=false;
    break;
    case 3:
    if (block3==false && manual==true){
    if (start3 == true){
      start3=false;
      }else{
        start3=true;
        }
        }else {
          start3=false;
          }
          break;
          case 4:
          if (block2==false && manual==true){
    if (start2 == true){
      start2=false;
      }else{
        start2=true;
        }
        }else {
          start2=false;
          }
          break;
          case 5:
          if (block1==false && manual==true){
    if (start1 == true){
      start1=false;
      }else{
        start1=true;
        }
        }else {
          start1=false;
          }
          break;
          case 6:
    if (manual == true){
      manual=false;
      }else{
        manual=true;
        }
          break;
    }
    
    }
    }
    digitalWrite(clockin,HIGH);
     delay(200);

e poi ho provato con un code basato su questo http://arduino.cc/en/Tutorial/ShftIn23, k però ho cancellato :/

e non ho avuto successo con nessuno u.u
P.S.
@pelletta, gli ingressi che non uso sono collegati a gnd
ciao
UP2
21  International / Generale / Re: Shifting IN e Shifting OUT [Sto impazzendo!] on: June 05, 2012, 04:10:55 pm
@uwe, leo e pelletta, ho usato le guide descritte sia per i collegamenti (uwe certamente ho collegato il din col dout, non hanno il data in comune, e certamente i diodi leds hanno ognuno una resistenza da 330ohm in serie), sia per i primi tests, ma poi ho creato codici di testa mia, basandomi su quel pò di teoria di elettronica digitale fatta quest'anno a scuola, anche se senza risultati... (ed ho anche scoperto, che le funzioni shiftin e shiftout, utilizzavano un codice con un ciclo molto simile a quello che avevo pensato io...)

@dalubar: non ci ho capito molto su quello che hai scritto, e non ho capito soprattutto, come associare i define dei leds al codice riportato... ti chiederei, di essere un po più clemente, e spiegarmi meglio come fare, grazie

ringrazio tutti per le risposte! smiley

P.S. il code lo posto domani, perchè c'è l'ho nell'altro pc...

grazie ancora
UP2
22  International / Generale / Shifting IN e Shifting OUT [Sto impazzendo!] on: June 05, 2012, 01:19:45 pm
Salve community,

sono 2 giorni che tento inutilmente senza successo, di utilizzare gli shift in ed out...
incomincio:
ho 2 cd4021 messi in cascata, con data > D2, latch > D3, clock > D4.
a questi ci sono collegati: al primo cd4021 8 pulsanti, più le resistenze di pull down (10k) su ogni ingresso, e sul secondo 6 interruttori, più resistenze di pull down...
in una subroutine che ho chiamato readshiftin(), dovrei vedere lo stato di ogni pulsante e interruttore, che se premuto (o chiuso), deve fare una determinata azione, modificare una variabile booleana, oppure incrementare una variabile intera, ecc...
ma dopo una marea di codici che ho testato, non ho avuto successo...

stessa cosa per i 74hc595 (sempre 2 in cascata) con data > D10, latch > D11, clock > D12.
a questi ci sono collegati 16 leds ed un transistor npn bc337 con resistenza di base da 150ohm.
vorrei gestire i leds ed il transistor, in modo indipendente, ovvero cambiare una sola uscita, senza intaccare le altre... (con un array (byte), sarebbe semplice, ma non ci sono riuscito -.- in quanto nell'istruzione shiftout devi mettere una variabile byte, o una sola variabile dell'array)

ho trovato qualche codice, ma anche qui non ho avuto fortuna... smiley-sad

chiedo cortesemente il vostro aiuto per risolvere questi problemi.

Ciao!
UP2
23  International / Generale / Re: Comandi tramite RF Links e Virtual Wire on: April 05, 2012, 10:15:48 am
Ho risolto leggendo i vari buf 1 per 1...

ho modificato questo:
Code:
if ((char *)buf=="ciao") {
        mx=true;
       } else {
         mx=false;
         }

con questo:
Code:
if (buf[0] == 'c' && buf[1] == 'i' && buf[2] == 'a' && buf[3] == 'o') {
if (mx==false) {
   mx=true;
       } else {
         mx=false;
  }
}

Grazie comunque
24  International / Generale / Comandi tramite RF Links e Virtual Wire on: April 05, 2012, 06:04:02 am
Salve,

ho un piccolo problema per quanto riguarda la comunicazione di comandi tramite gli rf links e virtual wire.
Premetto che ho cercato, ma non ho trovato risposte, quindi chiedo il vostro aiuto...

Vi spiego brevemente ciò che dovrei fare:
-un telecomando con una 15ina di tasti, ai quali è associato un messaggio (es. button1 deve inviare "led1on", button2 deve inviare "led1off", ecc...)
-un ricevitore che in base al messaggio recepito attivi o disattivi un'uscita, ed in alcuni casi incrementi o decrementi una variabile.

il codice (di test) che uso è questo:
TX
Code:
#include <VirtualWire.h>
int btn = 2;
void setup()
{
  pinMode(btn,INPUT);
 
    vw_setup(2000); // Bits per sec
}

void loop()
{
  if (digitalRead(btn) == HIGH) {
   
    const char *msg = "ciao";

    digitalWrite(13, true); // Flash a light to show transmitting
    vw_send((uint8_t *)msg, strlen(msg));
    vw_wait_tx(); // Wait until the whole message is gone
    digitalWrite(13, false);
    delay(200);
    }
}

e fin quì ok...

RX
Code:
#include <VirtualWire.h>
//#include <ShiftRegLCD.h>

//ShiftRegLCD lcd(2, 4, TWO_WIRE);

boolean mx = false;
void setup()
{
  pinMode(10, OUTPUT);
 
   // Serial.begin(9600); // Debugging only
 
//lcd.print("begin:");
    // Initialise the IO and ISR
   
    vw_setup(2000); // Bits per sec
vw_set_rx_pin(8); 
    vw_rx_start(); 
delay(2000);    // Start the receiver PLL running
//lcd.clear();
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen)) // Non-blocking
    {
int i;

      //  digitalWrite(13, true); // Flash a light to show received good message
// Message with a good checksum received, dump it.
//Serial.print("Got: ");

for (i = 0; i < buflen; i++)
{

   // lcd.print(buf[i]);
   // lcd.print(" ");
}


//Serial.println("");
      //  digitalWrite(13, false);
      if ((char *)buf=="ciao") {
        mx=true;
       } else {
         mx=false;
         }
    }
    if (mx==true) {
      digitalWrite(10,1);
      } else {
        digitalWrite(10,0);
        }
     
}

ecco, quì nasce il problema... se io uso il display lcd, tutto ok, mi scrive ciao, ma quando comparo il messaggio "ciao" con quello arrivato dal TX, il led non si accende, e la variabile mx (booleana) non cambia stato.
ve ne sarei grato se riusciste ad aiutarmi...

Ciao, UP2
25  Forum 2005-2010 (read only) / Italiano / Re: Led Cube a tempo di musica con Mega 2560 on: November 27, 2010, 03:30:41 pm
dopo un bel po di ricerche, ho trovato questi:

http://www.instructables.com/id/LED-Dance-Room/

http://jarv.org/blinkm-music.shtml

potrei usarli come base?

grazie
26  Forum 2005-2010 (read only) / Italiano / Led Cube a tempo di musica con Mega 2560 on: November 27, 2010, 11:52:42 am
Ciao a tutti,

sono tornato sull'idea del led cube rgb, che voglio presentare per l'orientamento a scuola, che fa giochi luminosi autonomi, però, mi chiedevo, se fosse possibile farlo reagire alla musica...

mi spiego:
da un semplice lettore mp3, vorrei collegare l'uscita (stereo se possibile), ad arduino, e far reagire i led a ritmo di musica, teniamo conto, che ho fatto un circuito di pilotaggio del catodo dei led, e che quindi con 27 uscite, comando 27 catodi di led, che poi a loro volta, con un circuito di pilotaggio a mosfet, mi variano i colori...

a me interessa solo pilotare i catodi a ritmo di musica, mentre l'rgb, viene comandato autonomamente da arduino, con dei random...

spero di essermi spiegato più o meno discretamente...

vorrei capire cosa mi serve (librerie ecc..), e se possibile, avere qualche esempio...

ciao, e mille grazie smiley-wink
27  Forum 2005-2010 (read only) / Italiano / Re: Analog output corrente 1 ampere on: November 23, 2010, 04:04:56 pm
Ciao Uwe, grazie mille...

scusa per la risposta in ritardo, ma ho dovuto comprare l'occorrente per testare il tutto...

sapessi come ho improvvisato, senza basetta, tutto volante xd..

comunque funziona alla grande, grazie

ciao   8-)
28  Forum 2005-2010 (read only) / Italiano / Re: Analog output corrente 1 ampere on: November 23, 2010, 10:25:21 am
grazie  smiley-wink
29  Forum 2005-2010 (read only) / Italiano / Re: Analog output corrente 1 ampere on: November 23, 2010, 10:12:24 am
grazie uwe,

però sorge un secondo problema...

io devo pilotare il positivo non il negativo, cioè dal mosfet deve uscire un +.

Ho pensato: è possibile risolvere, attaccando sotto il mosfet un lm317, che quindi mi varia la tensione positiva?
oppure mettere un altro mosfet al posto dell'lm317, che però funziona variando il G, col positivo?

grazie
30  Forum 2005-2010 (read only) / Italiano / Re: Analog output corrente 1 ampere on: November 22, 2010, 02:54:26 pm
ragazzi, per favore un esempio è possibile farlo?

grazie :-[
Pages: 1 [2] 3 4