Show Posts
Pages: 1 ... 42 43 [44] 45 46 ... 76
646  International / Deutsch / Re: RTC DS1307z zeigt Mist an. on: June 14, 2012, 06:57:13 am
Hi eberduino,
wenn du die Lib benutzt machst du das mit " RTC.start(); " nach dem Stellen der Uhr. Aber beachte das muss du nicht immer tun nur nach dem Stellen der Uhrzeit. Am besten so wie Megaionstorm im Sketch Uhr stellen beschrieben hat.
Ich habe diese Lib nicht benutzt sondern alles "selber" gemacht. Da hat ich auch das Problem das man die 1307 starten muss (habe lange danach gesucht), die 1337 braucht das nämlich nihct die läuft immer los deswegen bin ich da einem Pferd aufgesessen.
Guß
Daniel
647  International / Deutsch / Re: RTC DS1307z zeigt Mist an. on: June 13, 2012, 12:24:37 pm
Die RTC muss gestartet werden nach dem Stellen im Bit 7 des Controlbyte 0x00.
Das Bit muss auf 0 geschrieben werden (CH ClockHalt). Da es nach einem neustart automatisch auf 1 gesetzt ist und dadruch "steht".
648  International / Deutsch / Re: Ampelschaltung <- Mit Schalter/taster <> HILFE on: June 13, 2012, 12:13:34 pm
Habe mal dein Code ein bisschen bearbeitet und Kommentare rein geschrieben. Wichtigste Änderung es wäre jetzt eine Pull-Up Schlatung mit den Internen Widerstände also ein gedrückter Schalter hat ein LOW(false) und ein nicht gedrückter Schalter ein HIGH(true):
Und wenn ein Variable nur 1 Bit hat also 0 oder 1 dann besser boolean-Type nutzen der brauch weniger platz als ein Int-type.
Und da Ein und Ausgänge Feste variabeln sind muss man kein Platz mit Ints oder Bytes verschwenden. Direkt von Anfang an eine bessern Stil angewöhnen dann kommt man später auch klar. Nurmalerweise schreibe ich die Defines alles GROSS und die variabln klein.


Code:
#define ledGelb 10           // by VD    // Definierung der Variable <-> Int(integer) für ganze Zahlen
#define ledGruen  8  // VD      
#define ledRot  13   // VD
#define InputPin  11 //VD

boolean SchalterZustand=true;  //VD
boolean letzterSZustand=true;  //VD

void setup() {               // einmalige Definierung
  Serial.begin(9600);
  pinMode(InputPin,INPUT);    // schalter INPUT
  digitalWrite(InputPin,HIGH);  // aktivieren der internen Pullups Taster gedrückt LOW sonst immer HIGH VD
  pinMode (ledGruen, OUTPUT); // LED Pins als OUTPUT definiert
  pinMode (ledGelb, OUTPUT);
  pinMode (ledRot, OUTPUT);

}

void loop(){                                 // sich wiederholende Schleife

  SchalterZustand = digitalRead(InputPin);   // Den Schalter überprfüfen
  Serial.println(SchalterZustand,DEC);       // Serielle Kommunikation mit Computer

  //Schalter nicht gedrückt und das letzt mal war er gedrückt
  // Merken im letztn Zustandt so kommst du aus dem Bouncing problem raus und deine If Start nur "einmal" in wenn der Zustand von Highn nach Low wechselt
  if (SchalterZustand==true&&letzterSZustand==false){
    letzterSZustand==true;
  }

  // Bedingung wenn Schalter gerückt und das "mal" davor nicht gedrückt war dann ab in die Schleife
  if (SchalterZustand==false&&letzterSZustand==true)   // Bedingeunge falls Schalter gedrückt wahr ist und das mal
  {
    digitalWrite(ledRot, HIGH); // Rote LED ist an
    delay(5000);                // 5 Sekunden lang
    digitalWrite(ledGelb, HIGH); // Gelbe LED ist an
    delay(1000);                // 1 Sekunde lang
    digitalWrite(ledRot, LOW);  // Rote LED geht aus
    digitalWrite(ledGelb, LOW); // Gelbe LED geht aus
    digitalWrite(ledGruen, HIGH); // Grüne LED geht an
    delay(5000);                // 5 Sekunden lang
    digitalWrite(ledGruen, LOW); //Grüne LED geht aus
    delay (1000);               // wartet für 1 Sekunde
    digitalWrite(ledRot,HIGH);   //schaltet Rote LED an
    delay(3000);                //Signalbounce Umgehung
    letzterSZustand=false;        // Der war ja gedrückt und du hast was damit gemacht
  }
  else {                        // ansonsten  Schalter nicht geshcaltet
    digitalWrite(ledRot,HIGH);     // Rot leuchtet , die anderen nicht
    digitalWrite(ledGruen,LOW);
    digitalWrite(ledGelb,LOW)  ;
  }

}
649  International / Deutsch / Re: Theoretische Frage zur Ansteuerung von Lüftern (12V) on: June 11, 2012, 04:34:27 am
Ich würde dies Masse-Schaltend machen mit Hilfe von IRFD024 sind im DIP4 Gehäuse also einen Normalen IC Sockel so groß wie man ihn braucht.
Die Dinger schalteten sauber am Ardu Ausgang und haben nur 0,1Ohm On-widerstand und du brauchst dir um Wärme keine Sorgen machen die Dinger können 2,5A

Gruß
Daniel
650  International / Deutsch / Re: Zählerstand über Spannungs-Aus-Ein hinweg speichern on: June 07, 2012, 04:53:39 pm
1s ist viel Zeit (wenn du keine delays in deinem Programm hast). Das müsste der Ardu aber locker schaffen, vom Erkennen des Spannungsausfalles über einen Pin bis zum Borwnout. Da kann er auf jeden fall noch daten ins Ram/Rom schreiben
651  International / Deutsch / Re: Transistorsuche on: June 07, 2012, 04:50:39 pm
Ich bin ein Fan der kleinen IRFD Serie geworden (mal bei Reichelt reinschauen) die gibbet bis 2,5A/60 Volt und das in einem DIP-4 Gehäuse.

652  International / Deutsch / Re: RS485 Kommunikation on: June 07, 2012, 04:30:42 pm
Und dann noch die Slaves 1+2.
Sind gleich bis auf die Adresse:
Code:
#include "WConstants.h"
#include "RS485_protocol.h"
#include <NewSoftSerial.h>

#define ENABLE_PIN  4
#define LED 13


NewSoftSerial rs485 (2, 3);  // receive pin, transmit pin

// callback routines

void fWrite (const byte what)
{
  rs485.print (what); 
}

int fAvailable ()
{
  return rs485.available (); 
}

int fRead ()
{
  return rs485.read (); 
}

void setup()
{
  rs485.begin (9600);
  pinMode (ENABLE_PIN, OUTPUT);  // driver output enable
  pinMode (LED, OUTPUT);  // built-in LED
  pinMode(11,OUTPUT);
  pinMode(12,OUTPUT);
}  // end of setup


void loop()
{
  byte buf [10];                              // Buffer für Daten max 10 Byte
  byte received = recvMsg (fAvailable, fRead, buf, sizeof (buf) - 1,50);
  if (received){
    if (buf [0] != 2)
      return;  // not my device
    digitalWrite(buf[2],buf[3]);
  }





653  International / Deutsch / Re: RS485 Kommunikation on: June 07, 2012, 04:28:18 pm
Codes:
Master:
Code:
#include <nokia_3310_lcd.h>
#include "WConstants.h"
#include <NewSoftSerial.h>
#include "RS485_protocol.h"

#define ENABLE_PIN 4      // Enable Pin (High= Senden aktiv LOW empsfanen aktiv

int RINT1,RINT2,RINT3,Wert=0;
boolean links,hoch,rechts,runter,cbut,clock,lastclock=false;
boolean L1,L2,L3=true;
boolean lrechts=false;
boolean Send=false;
unsigned long pm1;
unsigned long pm2;
byte ref1=100;
byte ref2=33;
byte State,page,line,ebene,ebeneold=0;
byte Adresse=1;
byte AdresseSlave=0;
byte sndbuffer [4];                              // Buffer für Daten max 20 Byte

void fWrite (const byte what)                // Handler für RS485 Lib
{
  rs485.print (what);  
}

int fAvailable ()
{
  return rs485.available ();  
}

int fRead ()
{
  return rs485.read ();  
}

Nokia_3310_lcd lcd=Nokia_3310_lcd();
NewSoftSerial rs485 (2, 3);  // Initalisierung SoftSerial für RS485  (receive pin, transmit pin)


void setup (){
  lcd.LCD_3310_init();  //Display Intialiseiern
  lcd.LCD_3310_clear();  // Display löschen
  // Serial.begin(9600);
  rs485.begin(9600);
  pinMode (ENABLE_PIN, OUTPUT);  // Pin als Ausgang setzten
}

byte msg[4];

void loop(){
  if (millis()-pm2 > ref2){
    pm2=millis();
    lcd.LCD_3310_clear();  // Display löschen
  }
  if (millis()-pm1 > ref1){
    pm1=millis();
    clock = !clock;
  }
  if (clock==true){
    key_in();
    key();
  }
  if(rechts==true&&lrechts==false){
   if (page==0)
    page=line+1;
  
    lrechts=true;
    line=0;
  }
  if (links==true){
    page=0;
  }
  switch (page){
  case 0:
    Menu();
    break;
  case 1:
    Seite1();
    break;
  case 2:
    Seite2();
    break;
  case 3:
    Seite3();
    break;  
  case 4:
    Seite4();
    break;  
  case 5:
    Seite5();
    break;
  case 6:
    Seite6();
    break;
  }

  if (line <=0){
    line=0;
  }
  if (line >=5){
    line=5;
  }

  if(Send==true){                              // Senden der Anforderung
    // Buffer für Daten max 20 Byte
    msg[0]=AdresseSlave;                      // Adresse vom Slave
    msg[1]=0xAA;                               // Anfoderung Daten Senden BIN 1010101=0xf
     digitalWrite(ENABLE_PIN,HIGH);            // Treiber Aktivieren
    sendMsg (fWrite, msg, sizeof msg);        // Daten Senden
    digitalWrite(ENABLE_PIN,LOW);             // Treiber deaktiviern Empfänger akvivieren
    Send=false;
  }
}

/* byte received = recvMsg (fAvailable, fRead, buf, sizeof (buf) - 1,50);
 if (received)
 {
 if (buf [0] != Adresse)        // Ist das meine Adresse
 return;  // not my device
 RINT1=(buf[1]<<8)|(buf[2]);    // Zusammensetzten des Empfangenen Bytes
 RINT2=(buf[3]<<8)|(buf[4]);
 RINT3=(buf[5]<<8)|(buf[6]);
 }
 */


void key(){
  if (State==1 && links==false){                    //links
    links=true;
    if (ebene>=1){
      ebene=ebene--;
    }  
  }
  if (State==3 && rechts==false){                    //rechts
    rechts=true;
    if (ebene<=1){
      ebene=ebene++;
    }
  }
  if (State==2 && hoch==false){                    // Hoch
    line=line--;
    hoch=true;
  }
  if (State==4 && runter==false){                    // Runter
    line=line++;
    runter=true;
  }
  if (State==5 && cbut==false){
    if (page==2){
      AdresseSlave=1;
      if (line==0){
        L1=!L1;
        msg[2]=12;  // Ausgang am Slave
        msg[3]=L1;  // Status des Ausgang
        Send=true;  
      }
      if (line==1){
        L2=!L2;
        msg[2]=11;   // Ausgang am Slave
        msg[3]=L2;   // Status des Ausgangs
        Send=true;  
      }
    }
    if (page==3){
      AdresseSlave=2;
      if (line==0){
        L3=!L3;  
        msg[2]=12;   // Ausgang am Slave
        msg[3]=L3;   // Status des Ausgangs
        Send=true;
      }
    }
    cbut=true;
  }
  if (State==0){
    links=false;
    hoch=false;
    rechts=false;
    runter=false;
    cbut=false;
    lrechts=false;
  }
}

void key_in(){
  Wert=analogRead(A0);
  if (Wert<20)
    State=1;                            //links                                                            //Links
  if (Wert<550 && Wert>475)
    State=2;                            //oben                             //Oben
  if (Wert<780 && Wert>650)
    State=3;                            //rechts                            //Rechts
  if (Wert<370 && Wert>300)
    State=4;                            //unten                          // Unten
  if (Wert>980)
    State=0;                            // nichts
  if (Wert<200 && Wert>100)
    State=5;                            // Gedrückt
}
Tab2:
Code:
void Menu(){
  lcd.LCD_3310_write_string(0,line,">",MENU_NORMAL);
  lcd.LCD_3310_write_string(6,0,"Master",MENU_NORMAL);
  lcd.LCD_3310_write_string(6,1,"Slave1",MENU_NORMAL);
  lcd.LCD_3310_write_string(6,2,"Slave2",MENU_NORMAL);
  lcd.LCD_3310_write_string(6,3,"Seite 4",MENU_NORMAL);
  lcd.LCD_3310_write_string(6,4,"Seite 5",MENU_NORMAL);
  lcd.LCD_3310_write_string(6,5,"Seite 6",MENU_NORMAL);
}


void Seite1(){
  lcd.LCD_3310_write_string(0,0,"RS485 Test",MENU_NORMAL);
  lcd.LCD_3310_write_string(0,1,"Master bin ",MENU_NORMAL);
  lcd.LCD_3310_write_string(0,2,"ICH ICH ICH",MENU_NORMAL);
}

void Seite2(){
  lcd.LCD_3310_write_string(0,line,">",MENU_NORMAL);
  lcd.LCD_3310_write_string(6,0,"LED rt",MENU_NORMAL);
  if (L1==true)
    lcd.LCD_3310_write_string(50,0,"Ein",MENU_HIGHLIGHT);
  else
    lcd.LCD_3310_write_string(50,0,"Aus",MENU_NORMAL);
  lcd.LCD_3310_write_string(6,1,"LED gn",MENU_NORMAL);
  if (L2==true)
    lcd.LCD_3310_write_string(50,1,"Ein",MENU_HIGHLIGHT);
  else
    lcd.LCD_3310_write_string(50,1,"Aus",MENU_NORMAL);  
  lcd.LCD_3310_write_string(6,5," Slave 1 ",MENU_NORMAL);
}

void Seite3(){
  lcd.LCD_3310_write_string(0,line,">",MENU_NORMAL);
  lcd.LCD_3310_write_string(6,0,"LED rt",MENU_NORMAL);
  if (L3==true)
    lcd.LCD_3310_write_string(50,0,"Ein",MENU_HIGHLIGHT);
  else
    lcd.LCD_3310_write_string(50,0,"Aus",MENU_NORMAL);  

  lcd.LCD_3310_write_string(6,5," Slave 2 ",MENU_NORMAL);
}

654  International / Deutsch / RS485 Kommunikation on: June 07, 2012, 04:21:44 pm
So eine klein Projektvorstellung.
Ich werde meine Wohnung mit einem kleinen Hausbusystem ausstatten. Das Grundgerüst steht.
Ich habe eine Master Arduino Nano mit einem 5110 Display ausgerüstet und ein kleines Menu gebastelt.
Zudem habe ich noch zwei Slaves (im Moment schaltet sie nur ausgänge).
Am Ende wird ein Slave im Keller sein der unsere Wärmepumpe überwacht (5*Temperaturen über MAX127, und Laufzeit der Hz.) und den Zähler unserer Wohnung überwacht. Das alles wird dann in dann bei Anfrage des Masters zu dem gesendet.
Dann kommen in beide Fußbodenheizungsverteiler je ein Slave zum Ansteuern der einzelnen Räume.#
Die Slaves werden noch auf attiny84 portieren, da ich die Performance der ATMEGA328 auf den Slaves nicht brauche.
Für die Teste war auch je 20m Kabel zwischen den Slaves bzw Master und Slaves. Abschlußwiderstand 220Ohm je Seite
Hier mal eine kleines Vorabvideo.
Die RS 485 Lib ist von einem User hier aus dem Forum:
http://www.gammon.com.au/forum/?id=11428
Die Hardware:
2* Arduino nano V3
1*freeduino nano
3* SN75176 RS232=>RS485 Wandler
1*LCD Shield 5110 von nuelectronics


655  International / Deutsch / Re: Platine fertig - Hilfe zu fehlender Verbindung und Bauteile löten on: June 07, 2012, 04:21:06 am
Stelle doch mal dir .brd Datei ein dann kann man sehen ob die "korrekt" nach vorgabe hergestellt ist oder ob ein Fabikationsfehler ist.
656  International / Deutsch / Re: Bastler gesucht gegen Bezahlung on: June 03, 2012, 05:06:56 am
Es hört sich nach der Überbrückung der Elektronischen Drosseln in Mofas bzw Rollern an. Die die Drosselung über die Geschwindikeit machen (elektronisch) und nicht wie früher über gewichte und "Leistung".

Wenn dem so ist, bin ich der Meinung:
Drosseln sind Vögel und die gehören nicht in den Motor smiley-grin.
657  International / Deutsch / Re: LANC und DMX gleichzeitg on: May 31, 2012, 12:49:10 pm
Im Moment ist das doch so das beide Programme die Hardware UART(RS232-TTL) nutzen. Der DMX muss auf der Hardwareserial bleiben da du sonst Porbleme mit der Geschwindigkeit bekommst. Es müsste aber Funktionieren wenn die LANC Schnitstelle auf der NewSoftSerial benutzt, da diese nur 9600baud hat.
Ein bisschen Sketch und deinen Schaltplan dann werden Sie geholfen:-)
 
658  International / Deutsch / Re: Kabelkonfektionierung testen on: May 31, 2012, 12:38:55 pm
Er hat ja gesagt das es verschiedene Arten von Kabeln sind, hier bietet es sich ja an da man schon ein "Köpfchen" hat, die verschiedenen Kabelarten zu Identifizieren. Also Kabel in einer Bay anschließen Test starten (anzeige über LED und LCD).
Meldung: Kabel i.O. Typ Sub 9 1:1
oder so ähnlich. Ist ja genauso möglich :-)
659  International / Deutsch / Re: Welchen BUS soll ich nehmen? on: May 31, 2012, 06:46:33 am
Darf ich dir mal diese Seite an Herz legen aus dem Thread Treppenlicht mit I2C
http://www.mikrocontroller.net/articles/Hausbus#Vergleich_von_Hausbussystemen

Das sind die diversen Vor- und Nachteile aufgezählt
660  International / Deutsch / Re: Kabelkonfektionierung testen on: May 31, 2012, 06:43:26 am
Wie viele Adern testest du denn?
Ich würde mit Schieberegistern oder I2C PCF8574 16 Ausgänge nacheinander schalten. Und über Eingänge die Zustände abfragen. Du hinterlegst dann im Ardu die Muster der Kabel z.B. 1:1, Nullmodem etc. AUf einem Display gibst du dann aus ob das ein richtiges Kabel ist (Erkannt: 1:1 etc) oder du sagst wenn es nicht zum Muster passt welche zuordnungen falsch sind. Ist nur ein bisschen Prog. Aufwand.
Pages: 1 ... 42 43 [44] 45 46 ... 76