Show Posts
Pages: 1 ... 48 49 [50] 51 52 ... 75
736  International / Deutsch / Re: PWM Einstellung / Auflösung on: December 27, 2011, 02:14:16 pm
Die gewünschte Spannung bekommst du mit einerm RC-Glied hin. Diese ist aber dann ein bisschen verzögert 5*Tau.
Gerner genommen
http://de.wikipedia.org/wiki/RC-Glied

Hier steht auch das wichtige drin. Zu beachten ist auch noch der eingangswiderstandes des Gerätes das diese 0,83-1,95V braucht
737  International / Deutsch / Re: Lager aufstocken, aber mit was? on: December 17, 2011, 04:47:12 am
Ich bestelle mit immer ein paar schnuckelige MosFet im DIL gehäuse mit die man ideal direkt an den DOut der micros benutzen kann. IRFD 024

Gruß
volvodani
738  International / Deutsch / Re: Anfänger: Platine nach Entwicklungsarbeit anfertigen lassen? on: December 15, 2011, 02:57:05 am
Schaue mal hier rein das Dingen
http://jeelabs.com/products/rbbb
Defür einfach ein Motherboard bauen und draufstecken. Nachteil beim RBBB es ist keine Serial Wandler on Board zum Programieren das muss man dann extern machen.
Ich benutze für die "Motherboard"-Lösungen meiner Projekt immer den hier:
http://www.nuelectronics.com/estore/index.php?main_page=product_info&cPath=1&products_id=15
Da dieser einfach unschlagbar ist in Sachen Preis und der ist "Voll"-Bestückt also auch einen FTDI drauf und er verhältnismäßig günstig
739  International / Deutsch / Umstieg auf 1.0 on: December 13, 2011, 12:47:57 pm
Wer hat den Umstieg auf 1.0 gewagt. Ich habe mal auf der Arbeit ein Projekt mit externen Libaries (LCD) auf der 1.0 versucht zu kompilieren aber ich habe diverse  Meldungen bekommen. Es wurden ja auch einige Befehle geändert z.B. von Wiring() I2C

Wie seht es aus muss man jetzt alle Projekt nochmal überarbeiten  smiley-confuse um auf 100% 1.0 kompatibel zu bleiben oder sollte man besser die neuen Projekte auf der 1.0 anfangen und die alten auf der 0023 belassen.
Mal euer Erfahrungen :

Gruß volvodani
740  International / Deutsch / Re: Arduino ins Internet ohne statische IP on: December 13, 2011, 12:38:12 pm
^^^^Das war die Software auf dem Arduino.
Dann braucht man noch einen anbieter für die "Übersetztung" deiner dynamischen IP in eine Feste adresse (siehe Vorredner). In meinem Fall ist das dyndns.org dort habe ich mir die o.g. Adresse geschaltet mit dem Port 80 auf meine IP.
 Dann kommt noch im Router eine Portfreigabe oder Portforwarding genannt.
Das ist hier in meinem Fall die 192.168.178.5 (Arduino). Der Router bekommt jetzt über dyndns.org eine Anfrage auf Port 80, der Router weiss ja das Port 80 auf 192.168.178.5 "umleiten" (forwarding) soll. Und so kommt dann jeder mit dem Browser auf meine Fensterbank.

Anmerkung zum Code:
Ich mache hier die Temperaturauswertung mit einem 12Bit AD Wander von MAXIM dem MAX127.
 Ich habe daran einen LM35CZ Temperaturfühler über eine "virtuelle Masse" dran damit ich trotz fehlender negativen Versorgungsspannung Temperaturen unter 0°C lesen kann.
Und das zweite ist die Google Chart API die habe ich mit Hilfe dem Forum und sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr  vielem probieren (4 Tage jeden Abend 2h smiley-zipper) dann so hinbekommen.
Und es befindet sich eine Schiebe Array im Programm da ich keine Lust auf umrechnen mit Pointern hatte. Die Funktion verschiebt alle 30min die Werte um eine ArrayAdresse ( Array) um eine Position weiter ( Array [i+1]). Durchlaufzeit excl. delay liegt bei 1-2ms.

Viel Erfolg

volvodani

Bei so einem Projekt wird die Browser Quelltextanzeige den bester Freund.

Tante Edith sagte: Ich müsste noch was ergänzen :-)
741  International / Deutsch / Re: Arduino ins Internet ohne statische IP on: December 13, 2011, 12:25:58 pm
Hier ist mein Projekt
http://dhmaster.dnsalias.net/
Wollte ihn mal erweitern mit DCF Zeit aber habe ich dann doch nicht gemacht jetzt liest er nur die Temperatur auf meiner Fensterbank drausen und schreibt einen 24h Chart mit Hilfe von Google API.
Ich knall hier mal meinen Code hint. Fragen sind willkommen.
Code:
#include <EEPROM.h>
#include <Wire.h>
#include <SPI.h>
#include <Ethernet.h>


/*
 Lizenz (Deutsch): creative commons Namensnennung - Keine kommerzielle Nutzung - Weitergabe unter gleichen Bedingungen 3.0 Unported - http://creativecommons.org/licenses/by-nc-sa/3.0/deed.de
 Bei Verwendung und Weitergabe des Quellcodes muss ein Verweis auf den Autor und die Webseite erfolgen. In Begleitdokumentationen ist ebenfalls in angemessener Weise dieser Verweis anzubringen.
 
 License (English): creative commons Attribution-Noncommercial-Share Alike 3.0 Unported - http://creativecommons.org/licenses/by-nc-sa/3.0/
 When using and distributing this source code a reference to the author and the web page must take place. In accompanying documents this reference must also be attached.
 
 Code by Mats Vanselow - http://www.mats-vanselow.de
 enhanced by Daniel Herr
 Erweiterung des Servers mit einem MAX127(Analogeingang 12Bit) von Maxim per Ansteuerung über I2C in einer eigenen Funktion, zur bessern Auflösung der Temeperatur 10mV=1°
 Die Temperatur wird über einen LM35 gemacht dem mithilfe einer Diode die neagtive Temperaturbereich beigebracht wird. Um Temperaturdrift der Diode zu kompensieren wird automatisch
 der Offset alle 60 sekunden  korrigiert
 */

int tempc = 0;
float tempfloat=0;
int TempArray[49];
int TempSpeicher1=0;
int TempSpeicher2=0;
int tempafter=0;
int tempafter1=0;
int tempafter2=0;
int rund=0;
int runh=0;
int runm=0;
int runs=0;
int ticks=0;
int offset=475;      // erster Startwert des Offset mit einem mal gemessenen Wert von 480mV Dioden spannung
unsigned long last_millis1=0;
unsigned long last_millis2=0;
unsigned long last_millis3=1797000;

byte mac[] = {
  0x90, 0xA2, 0xDA, 0x00, 0x2B, 0xEA };           // MAC Adresse des Arduino Boards
byte ip[] = {
  192, 168, 178, 5 };                              // IP Adresse des Arduino Boards
byte gateway[] = {
  192, 168,178, 1 };                               // Gateway Fritzbox
byte subnet[] = {
  255, 255, 255, 0 };                             // Subnet Maske (optional)
Server server = Server(80);                       // Port Einstellung (Standard 80)

void setup() {
  Wire.begin();                                    // I2C als Master
  Ethernet.begin(mac, ip);//, gateway, subnet);   // Ethernet initialisieren
  server.begin();                                 // Auf Clients warten
  pinMode(4,OUTPUT);                              // zum Abwählen der SD karte  auf dem Shield
  digitalWrite(4,HIGH);                           // zum Abwählen der SD karte  auf dem Shield
  rund=EEPROM.read(1);
//EEPROM.write(1,0);
}

void loop() {
  tempc = ( 50000 * (readMAX127(0)-offset))/4096;    // Umwandeln der 12Bit Wertes in einen               Temperaturwert/100 zum besseren auflösen der Nachkommastellen
  tempfloat=tempc/100.0;
  long cur_millis;
  cur_millis= millis();                           

  if (cur_millis-last_millis1 >=1000) {          // Für den Laufzeit zähler Sekunden
    runs=runs+1;                                     
    last_millis1=cur_millis;
  }
  if (cur_millis-last_millis2 >60000){             // Für den Offset des wg. der viruellen Masse
    offset=readMAX127(1);                         // für das Minustemperaturen messen
    last_millis2=cur_millis;
  }
  if (cur_millis-last_millis3 >1800000){           // alles 30min wird das array verschoben 
    TempArray[0]=tempfloat;                      // Also ein durchschiebe Array
    for (int i=48;i>0;i--){
      TempArray[i]=TempArray[i-1];
    }
    last_millis3=cur_millis;
  }
  TempArray[0]=tempc/100;
  if (runs >= 60){
    runm=runm+1;
    runs=0; 
  }
  if (runm >= 60){
    runh=runh+1;
    runm=0;
  }
  if (runh >= 24){
    rund=rund+1;
    EEPROM.write(1, rund);
    runh=0;
  }


  Client client = server.available();             // Prüfen, ob Client Seite aufruft
  if (client) {                                   // Seitenaufruf durch User
    server.print("HTTP/1.0 200 OK\r\nServer: arduino\r\nContent-Type: text/html\r\n\r\n");
    server.print("<HTML><HEAD><TITLE>");
    server.print("Arduino Webthermometer");
    server.print("</TITLE>");
    server.print("</HEAD><BODY>");
    server.print("<b> Mein erster Temperatur - Webserver  </b><br />");
    server.print("Der ArduinoMEGA läuft seit ");
    server.print(rund);
    server.print(" Tagen ");
    server.print(runh);       
    server.print(" Stunden ");
    server.print(runm);
    server.print(" Minuten und ");
    server.print(runs);
    server.print(" Sekunden.<br />");
    server.print("Temperatur draussen auf der Fensterbank:<br /> ");
    server.print("<img src=\"http://chart.googleapis.com/chart?chxl=0:|-10%C2%B0C|%2B35%C2%B0C");
    server.print("&chxr=0,-15,25&chxt=y&chs=400x250&cht=gm&chco=000000,3072F3|42B542|FF3A00&chds=-10,35&chd=t0:"); //chco=000000
    server.print(tempfloat);
    server.print("&chl=");
    server.print(tempfloat);
    server.print("&chtt=°C+Aussentemperatur+aktuell\"> <br /> ");
    server.print("Der gemessene Offset beträgt: ");
    server.print(offset);
    server.print(" LSB <br /> ");
    server.print("<img src=\"http://chart.googleapis.com/chart?chxl=1:|24|21|18|15|12|9|6|3|0&chxr=0,-10,40|1,48,0");      //chart.googleapis.com
    server.print("&chxs=0,676767,11.5,0,lt,676767&chxt=y,x&chs=500x350&cht=lc&chco=000000&chds=-10,40");
    server.print("&chd=t:");
    int n;
    for (n = 48; n >0; n = n - 1){
      server.print(TempArray[n]);
      if (n>=2 && n<=48)
        server.print(",");
    };
    server.print("&chdl=Verlauf+Temperatur+letzte+24h&chdlp=b&chg=0,5&chls=2&chtt=Verlauf\"> <br /> ");
    delay(100);                                    // Kurz warten, um Daten zu senden
    client.stop();                               // Verbindung mit dem Client trennen
  }
}




long readMAX127(byte chan)
{
  byte control = 0x80 + (chan << 4);
  byte addr = 0x28;

  Wire.beginTransmission(addr);
  Wire.send(control); // send value
  Wire.endTransmission();

  Wire.requestFrom(addr, (byte)2);

  byte b1 = Wire.receive();
  byte b2 = Wire.receive() >> 4;
  long data = (b1 << 4) | (b2 & 0x0F);

  return data;
}
742  International / Deutsch / Re: SPI - Touchscreen on: December 12, 2011, 05:17:39 am
Quote
pinMode(10,HIGH);//Chip Select
ist falsch. Dadurch ist der Standartmsssig als Eingang definiert

pinMode (10,OUTPUT);  ist richtig

Und bei dem CS (LOW heißt angewählt, HIGH ist abgewählt)

Gruß

Daniel
743  International / Deutsch / Re: Timing Problem ! on: December 08, 2011, 03:32:26 pm
Hier mal ein Versuche mal dies mit Erklärung:

Code:
Anlassen=analogRead(A0);   //einlesen deines Zeitwertes an
Auslassen=analogRead(A1);  //einlesen deines Teitwertes aus auf diese wiese ist es maximal 1024 ms hier noch ein multiplikator oder eine map

if(millis() - millisAus >= Auslassen && AUS==true) {    // Hier schaut er nach ob die vergangene Zeit  seit dem Ausschalten Größer bzw gleich der gewählten
                                                   // ist . Ist dass der Fall
 digitalWrite(15, HIGH);                    // Dann macht der deine LED an ansonsten läuft er hier vorbei in das Restlich Programm
 AUS=false;
  millisAn = millis();                             // Hier merkt er sich wann er die LED angemacht hat
}
if(millis() - millisAn >= Anlassen&& AUS==false) {     //  Hier schaut er nach wie lange er die LED anlassen soll er weiss ja wann er sie  angemacht hat                
                                                   // hat ist das der Fall
digitalWrite(15, LOW);                    // macht er sie aus
AUS=true;
millisAus= millis();                           // und merkt sich wann er sie ausgemacht hat
  }
Bei so einem kleinen Program kannst du davon ausgehen das es diese Schleifen ca 2-3000 pro Sekunde prüft eher öfter (also wenn du keine delays  benutzt). Er führt die Anweisung hinter dem If erst aus wenn die wahr (richtig sind). So wie es jetzt geschrieben ist kannst während des anlassen bzw auslassen die Zeit durch drehen am Poti ändern. Packst du aber dann jeweils die Analog read in die If-Schleife wird auch nur einmal gelesen bis der wieder an der Stelle ist.

Hoffe es ausreichen erklärt zu haben

edit: Fehler beseitigt
744  International / Deutsch / Re: Bezugsadresse für Bauteile von xxx bzw. Erfahrung mit Versand?! on: December 06, 2011, 03:18:43 pm
Ich habe mir dort das Nokia 3310 Shield gekauft (in einer Bestellung)
und dann 2*Freeduino Nano (die günstigsten Breadboard Ardu-Clones incl FTDI-USB Chip).
Ich habe die dirket aus England musste auch kein Zoll zahlen.
Einfach Bestellt und nach 8-12Tagen hast du die Sachen.
Gruß
Daniel
745  International / Deutsch / Tausche MAXIM MAX127 gegen.... on: December 06, 2011, 02:07:06 pm
... z.B. ein Nokia 5110 bzw 3110 Display (am besten auf Paltine mit Pins).
Ich habe hier noch 1 absolut unbenutzten und auf Verwendung wartenden MAX 127.
I2C ADC 12Bit 8 Kanäle (wählbare Analog Reference).
http://pdfserv.maxim-ic.com/en/ds/MAX127-MAX128B.pdf
 
 
Also wer Interesse hat gerne melden.
Gruß
Daniel
746  International / Deutsch / Re: Timing Problem ! on: December 06, 2011, 01:33:10 pm
Du hast kein Timing Problem sondern du sagst deinem Controller immer das er an einer bestimmten stelle Warten soll (delay) iohne das es in dieser Zeit irgendwas machen kann.

Code:
 if(millis() - millis2 > gatepoti_read) {
       millis1 = millis();  
    digitalWrite(15, HIGH);
  }
if(millis() - millis1 > Clock_Delay) {
       millis2= millis();  
    digitalWrite(15, LOW);
  }


So etwas in der Richtung.

Gruß Daniel
747  International / Deutsch / Re: mit welcher Software sind diese Schaltpläne gezeichnet? on: December 04, 2011, 03:54:34 pm
Aus meiner Erfahrung würde ich sagen. Lieber etwas Arbeit auf sich nehmen und dann direkt mir Eagel oder Target3001! nfangen (zunächst mit der Freeware) und dann evtl. bei der Bucht was schießen oder halt kaufen. Wenn man später etwas "höher" hinaus will ist man bei Fritzing aufgrund der extrem kleinen Bibliotheken schnell am Ende .

Gruß
Daniel
748  International / Deutsch / Re: Probleme eines Anfängers :) on: November 30, 2011, 01:22:37 pm
Ich glaube du unterschätz den Atemga in Sachen speed. Ich habe eine Nixiuhr mit einer 4 Schieberegister und eine Multiplex schaltung ingestam 11k Code und ich habe ein Zykluszeit von 1-1,2ms das heist die Loop wir 800-1000 pro Sekunde ausgeführt!
749  International / Deutsch / Re: Probleme eines Anfängers :) on: November 29, 2011, 03:16:06 pm
Lieber maverick Die Uhr schreibt alles in Buchstaben aus deswegen ist die Sache auch etwas komplizierter

also:
Es ist zwanzig vor sieben
am Dienstag den 29.11.2011

Und den Geburtag der hinterlegten zeigt diese auch an mit 14 Tage vorlauf .
Also nicht einfach so Zahlen anzeigen. Ausserdem sollte das Stellen dann auch komfortabel sein wenn man schon mal ein 40*2 Display hat
also oben in der Zeile steht was man gearde stellen kann und unten sieht man das.
750  International / Deutsch / Re: Probleme eines Anfängers :) on: November 29, 2011, 12:14:49 pm
Die Funktionen dazu
Code:
[code]
void MinutetoText(int m){
  if (m >=5&&m<10){
    lcd.print(MinArray[2]);    // fuenf
    lcd.print(MinArray[1]);    // nach
  }
  if (m >=10&&m<15){
    lcd.print(MinArray[3]);    // zehn
    lcd.print(MinArray[1]);    // nach
  }
  if (m >=15&&m<20){
    lcd.print(MinArray[4]);    // viertel
    lcd.print(MinArray[1]);    // nach
  }
  if (m >=20&&m<25){
    lcd.print(MinArray[5]);    // zwanzig
    lcd.print(MinArray[1]);    // nach
  }
  if (m >=25&&m<30){
    lcd.print(MinArray[2]);    // fuenf
    lcd.print(MinArray[0]);    // vor
    lcd.print(MinArray[6]);    // halb
  }
  if (m >=30&&m<35){
    lcd.print(MinArray[6]);    // halb
  }
  if (m >=35&&m<40){
    lcd.print(MinArray[2]);    // fuenf
    lcd.print(MinArray[1]);    // nach
    lcd.print(MinArray[6]);    // halb
  }
  if (m >=40&&m<45){
    lcd.print(MinArray[5]);    // zwanzig
    lcd.print(MinArray[0]);    // vor
  }
  if (m >=45&&m<50){
    lcd.print(MinArray[4]);    // viertel
    lcd.print(MinArray[0]);    // vor
  }
  if (m >=50&&m<55){
    lcd.print(MinArray[3]);    // zehn
    lcd.print(MinArray[0]);    // nach
  }
  if (m >=55&&m<=59){
    lcd.print(MinArray[2]);    // fuenf
    lcd.print(MinArray[0]);    // vor
  }
}

void HourtoText(int h){
  if (h>12){
    h=h-12;
  }
  if (h==0){
    h=h+12;
  }
  if (mm>=25){
    if (h==12){
      lcd.print(StdArray[0]);
    }
    else
      lcd.print(StdArray[h]);
  }
  else{
    lcd.print(StdArray[h-1]);
  }
  if (mm<5){
    lcd.print(" UHR");
  } 
}

void WeekdaytoText(int d){
  lcd.print(TagArray[d-1]);
  if(setmode==0){
    lcd.print(" DEN ");
  }
}

void printDate2(){
  if (Tag<10){
    lcd.print("0");
  }
  lcd.print(Tag);
  lcd.print(".");
  if(Monat<10){
    lcd.print("0");
  }
  lcd.print(Monat);
  lcd.print(".");
  lcd.print(Jahr);
  lcd.print(" ");
}

void printTime(int x,int y){
  lcd.setCursor(x, y);
  if (hh<10){
    lcd.print("0");
  }
  lcd.print(hh);
  lcd.print(":");
  if(mm<10){
    lcd.print("0");
  }
  lcd.print(mm);
  lcd.print(":");
  if (ss<10){
    lcd.print("0");
  }
  lcd.print(ss);
}

void printDate(int x,int y){
  lcd.setCursor(x, y);
  if (Tag<10){
    lcd.print("0");
  }
  lcd.print(Tag);
  lcd.print(".");
  if(Monat<10){
    lcd.print("0");
  }
  lcd.print(Monat);
  lcd.print(".");
  lcd.print(Jahr);
  lcd.print(" ");
}

void printTemp(int x,int y, int z){
  int First;
  int Last;
  lcd.setCursor(x,y);
  Last=z%10;
  First=(z-Last)/10;
  lcd.print(First);
  lcd.print(".");
  lcd.print(Last);
  lcd.print(" Grad");

}

int get_TEMP(){                               // Funktion Einlesen Lambda
  long TEMPY;
  long TEMPX;
  long TEMPact;
  long TEMPdis;
  TEMPact=analogRead(temp);                  // Einlesen des Lambdaistwertes
  TEMPX=TEMPact*10*0.2;                        // Filter neuer Lesewert mit 20% pro Zyklus
  TEMPY=TEMPlast*10*0.8;
  TEMPdis=(TEMPX+TEMPY)/10;
  TEMPlast=TEMPdis;
  return TEMPdis;
}


void checkBday(){
  for (int i=0;i<=4;i++){
    TempTag=Datum[i]%100;
    TempMon=(Datum[i]-TempTag)/100; 
    if ((TempMon-Monat)==0&&check==true){
      RestTage=TempTag-Tag;
      if (RestTage<=14&&RestTage>=1){
        Pointer=i;
        check=false; 
      }
    }
  }
}
[/code]
Pages: 1 ... 48 49 [50] 51 52 ... 75