Show Posts
Pages: 1 ... 30 31 [32] 33 34 ... 76
466  International / Deutsch / Re: Aufbau Stromversorgung für einen Raum on: November 12, 2012, 03:51:10 am
Ês gibt diverse Videos mit Tests im Netzt die es auf solche längen geschafft haben. Es liegt aber an der Kapazität des Kabels mit der du hier wahrscheinlich Glück hast. Und mit deinenn Längen betreibst du den I2C ausserhalb der Spezifiktionen d.h. er kann unter Umständen gut laufen aber halt auch nicht :-) Schöner Satz. Es gibt halt keine Funktionsgarantie das der Bus auch unter schwierigeren Bedingung noch läuft. Ausserdem musst du den Bus überall kommen und gehend führen also Stichleitungen sind schwierig.

Bin immer noch der Meinung das du mit der RS485 besser aufgehoben bist da du hier auf jeden Fall längen bis 1000m schaffst aufgrund der Übertragungsart und der halt Funktionsbedingt recht immun ist gegenüber Störsignalen. Und es ist halt auch recht einfach Tinys mit dem Bus auszustatten und dann per Schiebregister oder PCF8574(I2C Portexpander) Viele ausgangsports zu schaffen. Und kurze Stichleitungen vom (Hauptbus in richtung Node) kann man in gewissen Rahmen auch machen.


Gruß
Der Dani
467  International / Deutsch / Re: 7 Segement Uhr 100mm Bauhöhe mit Attiny84 on: November 12, 2012, 02:57:06 am
Code:
/*
Attiny84 Big 7 Segment Uhr mit 74HC595
 
 */


#include <TinyWireM.h>
#include <USI_TWI_Master.h>


#define Shiftdata  8          // Pin 8 Datenleiung Schieberegister connected to Data in (DS) of 74HC595
#define Shiftclock 10           // Pin 9 Clockleitung connected to clock pin (SH_CP) of 74HC595
#define Shiftlatch 9         // Pin 10 Latchleitung connected to latch pin (ST_CP) of 74HC595
#define PWMOUT 7
#define BUTTON 1
#define RTCPuls 2
#define LDR 3
#define RTC_ADDRESS 0x68
#define TIME 750

byte ie,iz,hz,he,mz,me=0;  // Modulespeicher der stunden Minuten
boolean ldruck,druck=false;   // Stellknopf für Zeit
boolean longpress,shortpress=false;  // Unterscheidung langer kurzer druck
boolean blinktakt=false;             // Blinktakt 500ms
boolean lpuls,puls=false;            // Sekundenpuls
boolean hell=false;
unsigned long lmillis,start,ptime=0;
byte ss=0;
byte mm=0;
byte hh=0;
byte mEiner,mZehner,hEiner,hZehner=0;
byte setmode=0;
byte PWMArray[7]={
  10,20,40,80,160,255};
byte Pointer=4;


void setup(){
  pinMode(Shiftdata,OUTPUT);
  pinMode(Shiftclock,OUTPUT);
  pinMode(Shiftlatch,OUTPUT);
  pinMode(BUTTON,INPUT_PULLUP);
  pinMode(RTCPuls,INPUT);
  pinMode(PWMOUT,OUTPUT);
  TinyWireM.begin();                                  // Start I2C Kommunikation
  TinyWireM.beginTransmission(0x68);                  // Beginn Kommunikation auf  Adresse 0x68
  TinyWireM.send(0x07);                               // Pointer auf Control Register 0x07  
  TinyWireM.send(0x10);                               // Steuerwort Ex "0x30" Bin110000 Ausgang RTC Ausgang auf 1Hz Logic normal Levels setzn
  TinyWireM.endTransmission();                        // Beenden der I2C Kommunitkation
  HourRead();                                         // RTC Funktion lesen der aktuellen zeit Stunden
  MinuteRead();                                       // RTC Funktion lesen der aktuellen zeit Minuten
  RTC_Start();                                        // Start der Uhr
}


void loop(){
  /*=>Routine OneButton Control<=*/
  druck=digitalRead(BUTTON);            // Einlesen des Button (Achtung invertierte Logik da intrener Pull Up Widerstand aktiviert)
  if (druck==false&&ldruck==true){      // Steigende Flanke des Button
    start=millis();                     // Startzeit des Bettätigen
    ldruck=false;                       // Hilfsflag zur Flanken erkennung
  }
  if (druck==true&&ldruck==false){      // Falende Flanke des Buttons
    ptime=millis()-start;               // Die Länge in ms des Gedückten Zustandes
    ldruck=true;
  }
  if (ptime>=TIME){                    // Wenn der Druck länger (Hier750ms)
    longpress=true;                    // War ein Langer druck
    ptime=0;                           // Zeit wieder Zurücksetzten
  }
  if (ptime<TIME&&ptime>=50) {         // Wenn der Druck kürzer 750ms und länger 50ms (gegen prellen)
    shortpress=true;                   // War ein kurzer Durck
    ptime=0;                           // Zeit wieder zurücksetzuten
  }
  /*One Button End*/

  puls=digitalRead(RTCPuls);                 // Einlessen des RTC Sekunden Puls
  if (puls==true&&lpuls==false){             // wenn Sekundenpuls da und vorher nicht da war (steigende Flanke)
    lpuls=true;
    ss++;                                    // intern Sekunden zählen
  }
  if (ss>=60&&setmode==0){                   // Nach 60 Sekunden
    HourRead();                              // RTC Funktion lesen der aktuellen zeit Stunden
    MinuteRead();                            // RTC Funktion lesen der aktuellen zeit Minuten
    ss=0;                                    // Rücksetzzeten internen Sekunden Zähler auf 0
  }
  if (puls==false){                          // RTC Sekunden Hilfspuls
    lpuls=false;
  }
  if (shortpress==true){                    // Routine Kurzes drücken
    if (setmode==0){                        // In Normalmodus
      Pointer++;                            // ändern des Pointer der Helligkeit
      if (Pointer>=6){                      // Bei Pointer 6 und größer auf Pointer Null
        Pointer=0;
      }
    }
    if (setmode==1){                        // Minuten stellen
      mm++;
      if (mm>=60){
        mm=0;
      }
    }
    if (setmode==2){                        // Stunden stellen
      hh++;
      if(hh>=24){
        hh=0;
      }
    }
    shortpress=false;
  }
  if (longpress==true){                      // Routine Langes drücken
    setmode++;                               // Stellmodus erhöhen
    if (setmode==3){                         // Bei erreichen des Modus 3
      RTC_Set();                             // Neue Uhrzeit übernehmen in die RTC
      RTC_Start();                           // RTC Starten
      setmode=0;                             // Rücksetzten des Setmodes auf 0 (Normale Anzeige)
    }
    longpress=false;                         // Rücksetzten des Flags Langes Drücken
  }
  if (millis()-lmillis>=500){                // Aktalisiernung alle halbe Sekunden
    blinktakt= !blinktakt;                   // Blinktakt der Stellen anzeige
    mEiner=mm%10;                            // Einer Minuten
    mZehner=(mm-mEiner)/10;                  // Zehner Minuten
    hEiner=hh%10;                            // Einer Stunden
    hZehner=(hh-hEiner)/10;                  // Zehner Stunden
    hz=Dec2Shift(hZehner);                   // Wandeln der Zahlen in 7 Segment Ansteuerbytes
    he=Dec2Shift(hEiner);                    // dto.
    mz=Dec2Shift(mZehner);                   // dto.
    me=Dec2Shift(mEiner);                    // dto
    if (blinktakt==false){                  // Blinkroutine des Stellmodus
      if(setmode==1){                       // Minuten stellen
        me=0;
        mz=0;
      }
      if (setmode==2){                      // Stunden Stellen
        he=0;
        hz=0;
      }
    }
    digitalWrite(Shiftlatch, LOW);     // Latch aussetzten um in den Storage speicher zu schreiben
    shiftOut(Shiftdata, Shiftclock, MSBFIRST,  me);                    // Shift out der einzelenen Puffer wobei im letzten
    shiftOut(Shiftdata, Shiftclock, MSBFIRST,  mz);                    // Shift out der einzelenen Puffer wobei im letzten
    shiftOut(Shiftdata, Shiftclock, MSBFIRST,  he);                    // Shift out der einzelenen Puffer wobei im letzten
    shiftOut(Shiftdata, Shiftclock, MSBFIRST,  hz);                    // Shift out der einzelenen Puffer wobei im letzten
    digitalWrite(Shiftlatch, HIGH);                                        // Aktiverien des Latches (Schieben des Shift ind Storageregister) zum Anzeigen
    lmillis=millis();  
  }
  if (hh>=22&&hh<=8&&hell==true){                         // wenn Später 22Uhr und Früher als 8Uhr und es vorher Hell war dann dunkelschlaten
    Pointer=1;
    hell=false;
  }
  if (hh<22&&hh>8&&hell==false){                       // Wenn vor 22Uhr und nach 8 Uhr und vorher dunkel war dann Hell Schalten
    Pointer=5;
    hell=true;
  }
  analogWrite(PWMOUT,PWMArray[Pointer]);
}

byte Dec2Shift(byte x){
  byte shiftdata[11]={
    63,6,91,79,102,109,125,7,127,111};               // Daten für die 7 Segement anzeigen entspircht 0,1,2,3,4,5,6,7,8,9
  return shiftdata[x];
}

void HourRead(){
  TinyWireM.beginTransmission(RTC_ADDRESS);
  TinyWireM.send(0x02);               // Pointer auf Sekunden
  TinyWireM.endTransmission();
  TinyWireM.requestFrom(RTC_ADDRESS, 1);
  hh= bcdToDec(TinyWireM.receive());
}

void MinuteRead(){
  TinyWireM.beginTransmission(RTC_ADDRESS);
  TinyWireM.send(0x01);               // Pointer auf Sekunden
  TinyWireM.endTransmission();
  TinyWireM.requestFrom(RTC_ADDRESS, 1);
  mm= bcdToDec(TinyWireM.receive());
}

void RTC_Start(){
  TinyWireM.beginTransmission(RTC_ADDRESS);
  TinyWireM.send(0x00);
  TinyWireM.send(decToBcd(ss));    // 0 to bit 7 starts the clock
  TinyWireM.endTransmission();
}


void RTC_Set(){
  TinyWireM.beginTransmission(RTC_ADDRESS);
  TinyWireM.send(0x01);
  TinyWireM.send(decToBcd(mm));
  TinyWireM.send(decToBcd(hh));      // If you want 12 hour am/pm you need to set
  TinyWireM.endTransmission();
}

byte decToBcd(byte val)
{
  return ((val/10)<<4)+(val%10);
}

// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
  return ((val>>4)*10)+val%16;
}

Kompiliert sind das 2980 bytes also passt auch auf einen Attiny44
Gruß
Der Dani
468  International / Deutsch / Re: Spannungsfrage 5 Volt on: November 11, 2012, 03:57:15 pm
Quote
28.1 Absolute Maximum Ratings*
28.2 DC Characteristics
Operating Temperature.................................. -55°C to +125°C *NOTICE: Stresses beyond those listed under “Absolute
Maximum Ratings” may cause permanent damage
to the device. This is a stress rating only and
functional operation of the device at these or
other conditions beyond those indicated in the
operational sections of this specification is not
implied. Exposure to absolute maximum rating
conditions for extended periods may affect
device reliability.
Storage Temperature ..................................... -65°C to +150°C
Voltage on any Pin except RESET
with respect to Ground ................................-0.5V to VCC+0.5V
Voltage on RESET with respect to Ground......-0.5V to +13.0V
Maximum Operating Voltage ............................................ 6.0V
DC Current per I/O Pin ............................................... 40.0 mA
DC Current VCC and GND Pins................................ 200.0 mA
TA = -40°C to 85°C, VCC = 1.8V to 5.5V (unless otherwise noted)
Aus dem Datenblatt des 328er. Absolut Maximum Rating 6.0V. Ich würde sagen bis 5,5V wirst du nie Probleme haben. Also 6,0V "Überblebt" der Chip zwar verkürzt aber die Lebenszeit und geht gegen Betriebsicherheit.
Gruß
Der Dani
469  International / Deutsch / Re: Zusätzliche Pins an Seeduino PE7, PE6, .... -> LED glimmt nur anstatt zuleuchten on: November 11, 2012, 01:45:49 pm
Im Anhang ist die eine Datei für die IDE bei der ich die Seeeduino Pin zusätzlich drin habe damit man sie genauso handeln kann wie die "orginalen".
Damit lassen sich die Pins dann eifach als 70-85 benutzen wie die andern auch
Gruß
Der Dani
470  International / Deutsch / Re: Aufbau Stromversorgung für einen Raum on: November 11, 2012, 09:51:44 am
Die TinyWire Libraries arbeiten nicht mir der 1.0.2 zusammen vielleicht ist das auch ein Fehler

Gruß
Der Dani
471  International / Deutsch / 7 Segement Uhr 100mm Bauhöhe mit Attiny84 on: November 11, 2012, 09:34:27 am
Mein Projektvorstellung:
Eine 4 Ziffern 7Segementuhr mit 100mm Bauhöhe der Segemente.
Benötigte Hardware:
1* Attiny84
1* DS1307 RTC von Maxim
1* Batteriehalter
4* 74HC595 Schieberegister
4* ULN2803 Darlington Array
1* IRFL024 N-Channel Mosfet
1* 7805CV  Festspannungregler 5V
1* Batteriehalter CR20xx
1* Ribbon IKEA Bilderrahmen
Möbefolie weiß zu Beziehen des Glases.

Ziel war es alles auf einen Attiny84(44) CPU umzusetzten. Die Dateien der Cores sind von hier http://hlt.media.mit.edu/?p=1695 Diese laufen aber nur unter der 1.0.1 auf der 1.0.2 habe ich es durch einiges an probieren nicht hinbekommen.
Ich nutzte die TinyWireM-Libraries mit Erweiterungen von mir der defines für die x4er Serie, da die USI Interface auf anderen Pins bzw. Ports sitzt als bei den x5ern. Die Kommuniktion zu RTC läuft über I2C, wobei die externen Pullups zwingend erforderlich sind.
Ich wollte kein Multiplexing nutzten damit ich die volle Helligkeit der Anzeigen nutzten kann, deswegen die 4 Schieberegister+ 4 ULN2803.
Mit dem IRFD024 Mosfet habe ich die Output-Enable der Schiebregister mit PWM angesteuert um die Helligkeit der Segemente zu handlen.
Die Steuerung läuft via One-Button Steuerung.
Kurzer Druck im Normalmodus stellt die Helligkeit in 6 Stufen regeln. Ein Langer Druck bewirkt die beiden Setmodes (1= Stellen Minuten 2= Stellen Stunden).
Gruß
Der Dani

Hier  der Code

472  International / Deutsch / Re: Aufbau Stromversorgung für einen Raum on: November 11, 2012, 08:43:29 am
Ich nutze erfolgreich die Attiny84M als MAster für meine Uhr mit RTC :-)

Die orginale TinyWireS war nur für die 25/45/85 tiny für die 24/44/84er musst du die usiTwiSlave.h erweitern um folgende Zeilen

Code:
#if defined(__AVR_ATtiny84__) | \
defined(__AVR_ATtiny44__) | \
defined(__AVR_ATtiny24__)
# define DDR_USI DDRA
# define PORT_USI PORTA
# define PIN_USI PINA
# define PORT_USI_SDA PORTA6
# define PORT_USI_SCL PORTA4
# define PIN_USI_SDA PINA6
# define PIN_USI_SCL PINA4
# define USI_START_COND_INT USISIF
# define USI_START_VECTOR USI_START_vect
# define USI_OVERFLOW_VECTOR USI_OVF_vect
#endif


Dann läuft sie und lässt sich kompilieren. Da die Pins für USI auf den X5er anders sind als die X4er Attinys

Siehe hier https://github.com/svoisen/TinyWire/blob/master/TinyWireS/usiTwiSlave.c.

Den Kompletten link zu den geänderten Dateien
https://github.com/svoisen/TinyWire/tree/master/TinyWireS
Würde auch noch den Attiny24 dazu erweitern.

Gruß
Der Dani

473  International / Deutsch / Re: Brauche Hilfe bezüglich Temperatursensor (LM35) on: November 11, 2012, 05:00:34 am
Wenn der LM35 heiss geworden ist dann ist der garantiert falsch angeschlossen. Eher wird der Sensor kaputt sein als ganz. Hier aus dem Datenblatt gehen ganz eindeutig die Anschlüsse hervor:
http://html.alldatasheet.com/html-pdf/8873/NSC/LM35CZ/78/2/LM35CZ.html
+Vs = 5V
Vout= 0-5V also Temperatur Ausgang
GND= GND (0V,Masse)

An die LED muss in jedem Fall ein Widerstand sonst machst du u.U. den Ausgang kaputt.
Hier ein schönes Beispiel zu auslesen des Sensors
http://www.mats-vanselow.de/arduinotemperatur

Gruß

Der Dani
474  International / Deutsch / Re: Aduino IDE 1.0.2 freigegeben. on: November 10, 2012, 01:04:34 pm
Noch ne Nachricht die ganzen Attiny Cores funktionieren auf der 1.0.2 nicht obwohlsie auf der 1.0.1 liefen. Habe 1h gesucht aber es hat sich mir leider nicht erschlossen zum ändern.
Gruß
 Der Dani
475  International / Deutsch / Re: Viele Leds über Arduino ansteuern on: November 07, 2012, 07:56:53 am
Ich denke das du mit dem MAX7219/7221 besser bedient bist ich habe eine QlockTwoQlone damit aufgebaut.
Schau mal hier
http://www.arduino.cc/playground/Main/LedControl  dort ist ein schönes Beispiel zu deinem Project im Grunde ist das ähnlich der Matrix auf dem Foto unten links.
Du kannst damit eine bist zu 8*8 Matrix ohne Probleme aufbauen. Größter Vorteil du brauchst nur ein Widerstand am IC für die Einstellung des LED-Stroms.

Gruß
Der Dani
476  International / Deutsch / Re: Zwei Geräte mit einem Arduino per RS232 steuern on: November 07, 2012, 06:08:55 am
Welchen Arduino hast du denn der MEGA hat 4 UART schnittstellen für RS232, aber Achtung normale RS232 Schnittstellen haben +-15V dein Arduino aber nur 5V ,wenn du direkt anschließt dann zerstört du deine CPU. Also brauchst du einen Pegelwandler für jede Schnittstelle einen MAX232(1Kanal) oder MAX234(für 2Kanäle) um mit der normalen RS232 unterhalten zu können.
Wenn du einen Uno o.ä.besitzt kannst du über Software Serial noch Software UARTs  hinzufügen aber die können nicht die unbegrenzt schnell, da hängt dann auch von deinem Programm ab du musst sehen das du die Eingangspuffer schnell leermachst.
Unter Bespiele in der IDE ist unter multi-Software Serial Sketch.

Gruß
Der Dani
477  International / Deutsch / Re: Hiiiiiilfe on: November 06, 2012, 01:59:42 pm
Ich kaufe meine hier:
https://guloshop.de/shop/Mikrocontroller:::3.html
478  International / Deutsch / Re: Analogwert Ausgabe mit 7-Segment Anzeige on: November 06, 2012, 09:03:24 am
Bei unlineraren Werten am Analog Eingang kannst du interprolieren mit der Map funktion. Also für verschiedene Analog bereiche verschiendene Augaben.
Pseudo code

Code:
y = map(Wert1,100,400, 10,14);
y = map(Wert1,401,800, 15,17);
y = map(Wert1,801,1020, 18, 20);
So hast du eine nicht ganz lineare Gerade sonden nur zwischen den jeweils zwei Punkten die du angegeben in dem jeweiligen map angegeben hast.

Gruß
Der Dani
479  International / Deutsch / Re: IRLZ34N geht kaputt on: November 06, 2012, 04:26:47 am
Funktioniert also jetzt?
480  International / Deutsch / Re: Hiiiiiilfe on: November 05, 2012, 01:03:30 pm
Welchen Bootloader hast du drauf? Wenn du den 168 Bootloader drauf hast musst du dann nachher das entsprechende Board anwählen. Ich glaube wenn du den Optibootloader drauf packst und du dann den UNO wählst erwartet der einen 328er, aber da gibt es ja bestimmt Leute die mehr Ahnung haben.
Nur mal so eine Idee.
Pages: 1 ... 30 31 [32] 33 34 ... 76