Show Posts
Pages: 1 ... 84 85 [86] 87 88 ... 220
1276  International / Deutsch / Re: Laufschrift LED Matrix on: January 25, 2014, 11:53:07 am
schön gemacht :-) läuft bei mir auch soweit.. kannst du mal bitte posten wie du die LEDs an den Max angeschlossen hast bei mir ist alles falsch rum smiley-grin

Ich habe selbst gar nichts angeschlossen, sondern fertig gekauft!
Beim billigsten China-Händler auf eBay, den ich für die Matrix finden konnte. Artikelnummer (190867212840).
Und wohl dem Händler, der den längsten Postweg hat: Am 06.12. bestellt und am 23.01. geliefert.
Schaltbild habe ich dafür nicht.

Was heißt "alles falsch rum"?
Läuft die Schrift bei Dir um 90, 180, 270 Grad gedreht? Und ggf. spiegelverkehrt?

1277  International / Deutsch / Re: Arduino IDE- Farben verändern on: January 25, 2014, 10:19:59 am
ich würde gerne die Farben der Arduino IDE ändern und habe deshalb versucht über die Preferences-Textdatei dies zu bewerkstelligen. Leider passiert da nix. Ist das ändern von Farben evtl. "nicht vorgesehen"?

Die IDE-Farben kannst Du in der ..\arduino-1.0.5\lib\theme\theme.txt einstellen.

Windows-User zum Öffnen bitte ein Programm verwenden, das mit Zeilenende-Zeichen im Unix-Style klarkommt, z.B. "WordPad".
1278  International / Deutsch / Re: Externe zugrif auf Arduino on: January 25, 2014, 04:26:38 am
Wie würdet Ihr hier vorgehen?

Um eine handvoll Konfigurationsdaten vom PC in den Arduino zu übertragen, brauchst Du kein eigenes Programm schreiben. Es reicht dafür der "Serielle Monitor" oder ein beliebiges "Serielles Terminalprogramm",

Das Vorgehen dafür ist: Du denkst Dir ein "Übertragungsprotokoll" für die serielle Schnittstelle aus, mit dem Du die Konfigurationsdaten überträgst. Zum Beispiel denkst Du Dir Befehle nach diesem Schema aus:

v1, 2000, 300
v2, 2200, 50
v3, 2220, 170
k, 2350
start

Mit der Bedeutung:
v1, 2000, 300 ==> Ventil1 soll nach 2000 ms für 300 ms öffnen
v2, 2200, 50 ==> Ventil 2 soll nach 2200 ms für 50 ms öffnen
v3, 2220, 170 ==> Ventil 3 soll nach 2220 ms für 170 ms öffnen
k, 2350 ==> die Kamera soll nach 2350 ms auslösen
start ==> Schaltsequenz starten (jetzt geht's los und die Zeit zählt)

So dass Du zeilenweise die Parameter neu setzen kannst. Oder einfach mit "start" die Schaltsequenz starten kannst.

Dazu würde nur der serielle Monitor benötigt und auf dem Arduino brauchst Du nur eine Auswerteroutine für die serielle Schnittstelle, mit der die Befehle empfangen werden, aufgrund derer dann Variablen im Programm geändert werden bzw. der Ablauf gestartet wird.

Ein Grundgerüst für die reine Ablaufsteuerung habe ich hier erst vor wenigen Tagen als Code gepostet:
http://forum.arduino.cc/index.php?topic=211536.msg1552201#msg1552201
Bei diesem Programm - so wie ich es gepostet habe - werden die Variablen im Quelltext festgelegt und zusammen mit dem Programm hochgeladen.

Um nun nicht ständig geänderte Programme hochladen zu müssen, brauchst Du eigentlich nur noch den Code für den Empfang serieller Befehle zum Ändern der Hardware-Variablen dazuschreiben und dann kannst Du alles mit dem "Seriellen Monitor" über kurze Befehlseingaben steuern, ohne ein zusätzliches PC-Programm für die Änderung der Steuerzeiten zu benötigen.

1279  International / Deutsch / Re: Öl Temperatur messen, welcher Öltemperaturgeber? (KFZ) on: January 25, 2014, 04:07:00 am
Nur würde diese ja mein Messergebniss verfälschen. Wie kann ich diese wieder rausrechnen?

Eine Transienten-Suppressordiode zwischen +5V und GND in der Messschaltung verfälscht den Messwert nicht.

Falls Du andere Arten von Dioden mit unbekannten Daten und auf andere Art in die Schaltung integrieren möchtest, so dass die Messwerte verfälscht werden, kannst Du die Schaltung zur Steigerung der Genauigkeit ggf. kalibrieren.

Du machst zum Kalibrieren z.B. immer zwei Messungen, einmal ohne die Schutzschaltung und einmal mit, bei derselben Temperatur, und beobachtest, um wieviel sich die Temperaturanzeige beim Anschalten des zusätzlichen Bauteils ändert:
- Bei Zimmertemperatur ohne/mit Schutzbauteil: Temperaturanzeige ändert sich wieviel?
- Bei kochendem Wasser ohne/mit Schutzbauteil: Temperaturanzeige ändert sich wieviel?
- Bei erhitztem Frittieröl (Vorsicht Brandgefahr!) ohne/mit Schutzbauteil: Temperaturanzeige ändert sich wieviel?

Dann kennst Du den Einfluß des Bauteils an drei festen Temperaturpunkten. Und um den Einfluß bei anderen Temperaturen zu erhalten, kannst Du den Korrekturwert mittels linearer Interpolation ermitteln.
1280  International / Deutsch / Re: Hygrochip HYT 271 defekt oder ein Fehler von mir? on: January 24, 2014, 03:25:20 pm
ja hab ich gerade getan, ein Lichtsensor:
Scanning...
I2C device found at address 0x39  !
Also das funktioniert einwandfrei.

Dann sieht es nicht gut aus für Deinen Sensor.

Scheint ein besonders empfindliches Teilchen zu sein, wenn ich mir die Handlingsvorschriften dafür ansehe:
http://www.ist-ag.com/eh/ist-ag/resource.nsf/imgref/Download_HYT%20271_blister%20handling%20guideline_E1.1.pdf/$FILE/HYT%20271_blister%20handling%20guideline_E1.1.pdf
1281  International / Deutsch / Re: Hygrochip HYT 271 defekt oder ein Fehler von mir? on: January 24, 2014, 02:57:29 pm
die Leitungen sind etwa 10 cm

Hast Du mal versuchsweise einen anderen I2C-Sensor oder I2C-Gerät angeschlossen und getestet, ob der I2C-Scanner dessen Adresse findet?
1282  International / Deutsch / Re: Hygrochip HYT 271 defekt oder ein Fehler von mir? on: January 24, 2014, 02:21:48 pm
das heißt also entweder ich habe es falsch angeschlossen oder das teil ist kaputt oder?

Ist die Anschlußleitung vom Arduino zum Sensor vielleicht länger als ein paar Zentimeter?

Wenn Du da jetzt einen halben Meter oder mehr zwischen hast, brauchst Du externe PullUp Widerstände am I2C Bus.
1283  International / Deutsch / Re: Laufschrift LED Matrix on: January 24, 2014, 03:26:39 am
Nachdem ich inzwischen auch so ein 8x8-LCD-Matrix Modul mit Max7219 besitze, habe ich das weiter oben skizzierte Konzept zur Darstellung einer Laufschrift einmal in ein Beispielprogramm umgesetzt.

Code:
// Laufschrift-Demo für 8x8 LED Matrix mit Max7219
// By 'jurs' for German Arduino Forum

/* Used Pins */
int Max7219_pinCLK = 10;
int Max7219_pinCS = 9;
int Max7219_pinDIN = 8;

#define NUMCHARS 37 // Kleiner Zeichensatz aus 37 Zeichen (0..9, A..Z und Leerzeichen)
const char chars[NUMCHARS+1]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ ";
const unsigned char disp1[NUMCHARS][8]={
{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//0
{0x10,0x30,0x50,0x10,0x10,0x10,0x10,0x10},//1
{0x7E,0x2,0x2,0x7E,0x40,0x40,0x40,0x7E},//2
{0x3E,0x2,0x2,0x3E,0x2,0x2,0x3E,0x0},//3
{0x8,0x18,0x28,0x48,0xFE,0x8,0x8,0x8},//4
{0x3C,0x20,0x20,0x3C,0x4,0x4,0x3C,0x0},//5
{0x3C,0x20,0x20,0x3C,0x24,0x24,0x3C,0x0},//6
{0x3E,0x22,0x4,0x8,0x8,0x8,0x8,0x8},//7
{0x0,0x3E,0x22,0x22,0x3E,0x22,0x22,0x3E},//8
{0x3E,0x22,0x22,0x3E,0x2,0x2,0x2,0x3E},//9
{0x8,0x14,0x22,0x3E,0x22,0x22,0x22,0x22},//A
{0x3C,0x22,0x22,0x3E,0x22,0x22,0x3C,0x0},//B
{0x3C,0x40,0x40,0x40,0x40,0x40,0x3C,0x0},//C
{0x7C,0x42,0x42,0x42,0x42,0x42,0x7C,0x0},//D
{0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x7C},//E
{0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x40},//F
{0x3C,0x40,0x40,0x40,0x40,0x44,0x44,0x3C},//G
{0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44},//H
{0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x7C},//I
{0x3C,0x8,0x8,0x8,0x8,0x8,0x48,0x30},//J
{0x0,0x24,0x28,0x30,0x20,0x30,0x28,0x24},//K
{0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C},//L
{0x81,0xC3,0xA5,0x99,0x81,0x81,0x81,0x81},//M
{0x0,0x42,0x62,0x52,0x4A,0x46,0x42,0x0},//N
{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//O
{0x3C,0x22,0x22,0x22,0x3C,0x20,0x20,0x20},//P
{0x1C,0x22,0x22,0x22,0x22,0x26,0x22,0x1D},//Q
{0x3C,0x22,0x22,0x22,0x3C,0x24,0x22,0x21},//R
{0x0,0x1E,0x20,0x20,0x3E,0x2,0x2,0x3C},//S
{0x0,0x3E,0x8,0x8,0x8,0x8,0x8,0x8},//T
{0x42,0x42,0x42,0x42,0x42,0x42,0x22,0x1C},//U
{0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18},//V
{0x0,0x49,0x49,0x49,0x49,0x2A,0x1C,0x0},//W
{0x0,0x41,0x22,0x14,0x8,0x14,0x22,0x41},//X
{0x41,0x22,0x14,0x8,0x8,0x8,0x8,0x8},//Y
{0x0,0x7F,0x2,0x4,0x8,0x10,0x20,0x7F},//Z
{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},// [Space]
};


void Write_Max7219_byte(unsigned char DATA)
{
  unsigned char i;
  digitalWrite(Max7219_pinCS,LOW);
  for(i=8;i>=1;i--)
  {  
    digitalWrite(Max7219_pinCLK,LOW);
    digitalWrite(Max7219_pinDIN,DATA&0x80);//Obtain the MSB of the data
    DATA = DATA<<1;
    digitalWrite(Max7219_pinCLK,HIGH);
  }
}


void Write_Max7219(unsigned char address,unsigned char data)
{
  digitalWrite(Max7219_pinCS,LOW);
  Write_Max7219_byte(address);
  Write_Max7219_byte(data);
  digitalWrite(Max7219_pinCS,HIGH);
}

void writeChar2Matrix(byte* databytes)
{
  int i;
  for(i=0;i<8;i++)
  {
    Write_Max7219(i+1,databytes[i]);
  } 
}

void Init_MAX7219(void)
{
 Write_Max7219(0x09, 0x00);       //decode: BCD
 Write_Max7219(0x0a, 0x03);       //Brightness
 Write_Max7219(0x0b, 0x07);       //
 Write_Max7219(0x0c, 0x01);       //
 Write_Max7219(0x0f, 0x00);       //
}



void setup()
{
  pinMode(Max7219_pinCLK,OUTPUT);
  pinMode(Max7219_pinCS,OUTPUT);
  pinMode(Max7219_pinDIN,OUTPUT);
  delay(50);
  Init_MAX7219();
}



void textloop(char* text)
{
  byte i,j,k;
  byte data[8];
  byte thischar, nextchar;
  for(j=0;j<strlen(text);j++)
  {
    thischar=strchr(chars,text[j])-chars; // Index des Buchstaben im disp1 Array
    // Index des nächsten Buchstaben im disp1 Array
    if (j+1<strlen(text)) nextchar=strchr(chars,text[j+1])-chars;
    else nextchar=strchr(chars,' ')-chars;
   
    for (k=0;k<8;k++)
    {
      for (i=0;i<8;i++)
      {
        data[i]=((unsigned int)disp1[thischar][i]<<8 | disp1[nextchar][i]) >>8-k;
      }
      writeChar2Matrix(data);
      delay(50);
    }
  }
}

void loop()
{
 textloop(" LED 8X8 MATRIX LAUFSCHRIFT ");
}

Für ein reales Programm müßte man sicher noch RAM-Speicher sparen und die Font-Definition in den PROGMEM-Flashspeicher verschieben und anstelle der delay-Logik eine delayfreie Animation realisieren. Ist also mehr eine Proof-of-Concept-Demo, wie es gehen könnte, der Schrift das Laufen beizubringen.

Nur zur Vervollständigung des Threads mit ein wenig Demo-Code.  smiley-wink
1284  International / Deutsch / Re: Operator nicht ( ! ) on: January 23, 2014, 02:00:51 pm
ich möchte das Zeichen "5" darstellen, wenn sich der Wert zwischen
40 und 45 bewegt, ist er kleiner oder größer, soll nichts dargestellt
werden.

Das ist wahrscheinlich eine falsche Beschreibung dessen, was Du eigentlich möchtest.

Wenn ich mal raten soll, möchtest Du eigentlich:

"ich möchte das Zeichen "5" darstellen, wenn sich der Wert zwischen
40 und 45 bewegt, ist er kleiner oder größer, soll ein eventuell angezeigtes Zeichen mit einem Leerzeichen überschrieben werden".

Die Logik wäre in dem Fall, nicht "nichts" auszugeben, sondern ein Leerzeichen " ", mit dem das vorhandene Zeichen auf dem Display überschrieben wird.
1285  International / Deutsch / Re: Problem mit einfacher Multiplikation on: January 23, 2014, 10:27:54 am
Wo liegt mein Fehler?

Du programmierst einen Integer-Überlauf.

Der Zahlentyp int geht von −32.768   bis +32.767.
1286  International / Deutsch / Re: float oder int in String Schreiben on: January 23, 2014, 07:47:38 am
wollte über TCP einen Temperaturwert senden. Diesen müsste ich in einen String umwandeln.

Wie kann ich eine INT oder eine float in einen String umwandeln ?

http://www.nongnu.org/avr-libc/user-manual/modules.html

In Frage kommen zur Umwandlung von int und float/double in Char-Arrays:
itoa - http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga4f6b3dd51c1f8519d5b8fce1dbf7a665
dtostrf - http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga060c998e77fb5fc0d3168b3ce8771d42

Und andere - schaue Dir die Library an!
1287  International / Deutsch / Re: HD44780 - Zeichensatztabelle on: January 22, 2014, 11:55:28 am
denmach müsste ja mit

lcd.write(11100001)

doch ein "ä" raus kommen. Kommt aber ein "a" raus o.O - Warum?

Oh no!
Du sendest das niederwertigste Byte der Dezimalzahl 11100001
11100001 (dezimal) ist als Binärzahl 0b101010010101111101100001 und davon sendest Du die letzten acht Bit:
0b01100001

Du vergißt beim Senden von Binärwerten immer das Präfix "0b" vor der Ziffernfolge!
1288  International / Deutsch / Re: Serial1 bis Serial3 liefern sinnlose Daten on: January 22, 2014, 10:40:49 am
Daten über Serial1 (Pins TX1 und RX1) zu senden, aber wenn ich diese am Serial Monitor ausgebe, erhalte ich nur sinnlose Buchstaben-/Zeichenkombinationen (siehe Anhang).

Serial1 auf dem MEGA sind die Pins 19 (RX) und 18 (TX).
Erkläre doch bitte mal:
- welche Hardware hast Du als Serial-Adapter wie am MEGA-Board an den Pins 18 und 19 angeschlossen?

Hinweis: Nur "Serial" ist direkt über das Programmierkabel mit dem PC verbunden und kann ohne weitere Hardware vom seriellen Monitor angezeigt werden. Die weiteren drei Schnittstellen (Serial1, Serial2, Serial3) können ohne zusätzliche Adapter-Hardware nichts am PC auf dem seriellen Monitor ausgeben.
1289  International / Deutsch / Re: Binärdaten einlesen on: January 22, 2014, 09:37:53 am
ich möchte von den Pins 30-41 eine 12Bit Binärzahl einlesen. Diese möchte ich anschließend in eine Dezimalzahl umwandeln und weiterverarbeiten.
Mit digitalRead() könnte ich die einzelnen Pins auslesen, aber wie setze ich diese 12 Werte zu einer Binärzahl zusammen?
Und wie kann ich diese Binärzahl wiederum in eine Dezimalzahl umwandeln? (Arduino Due)

Das dürfte auf einem DUE kaum anders funktionieren als auf einem anderen Arduino (mit ausreichender Pin-Anzahl):
Code:
  int number=0;
  for (int i=0;i<12;i++)  bitWrite(number,i,digitalRead(i+30));
  Serial.print("Zahl dez: ");Serial.println(number);
  Serial.print("Zahl bin: ");Serial.println(number,BIN); 

Übrigens: Eine Zahl ist eine Zahl ist eine Zahl.
Da gibt es nichts umzuwandeln an der "Zahl", sondern allenfalls bei der "menschenlesbaren Ausgabe" der Zahl wird dieselbe Zahl eben entweder in Dezimaldarstellung oder in Binärdarstellung auszugeben. Die Zahl, die ausgegeben wird, ist dabei dieselbe.
1290  International / Deutsch / Re: Probleme mit Jitter bei Arduino UNO Boards on: January 20, 2014, 03:39:54 pm
Problem ist das das Rechtecksignal jittert, auf dem Oszi sieht man wie das Rechtecksignal manchmal richtig ist und ab und zu aber auch verschoben und falsch ausgegeben wird. habe 2 verschiedene Arduino Uno Bords versucht.

Habe das Jittern als Video mal hochgeladen
http://www.youtube.com/watch?v=pIjBcBB1f10&feature=youtu.be

An was liegt das ? und kann ich das irgendwie beheben ?

Das liegt im wesentlichen an ausgeführten "Interrupts" im System, die den laufenden Code an jeder Stelle zwecks Behandlungs des Interrupts unterbrechen können. Wenn Du in Deinem Code (oder verwendeten Libraries) keine Interrupts aktivierst, kämen beispielsweise auch der Timer-Interrupts in Frage, mit dem die Arduino-Software standardmäßig die Zeit zählt, oder bei aktivierter serieller Schnittstelle die Interrupts zum Senden und Empfangen von seriellen Zeichen. Die Laufzeit Deines Codes (auch delay-Zeiten) verlängert sich dann jeweils um die Dauer der Interrupt-Serviceroutine, die zwischendurch läuft.

Ein exakteres Timing von zeitkritischem Code erreichst Du zum Beispiel, indem Du die Interrupts während der Zeit blockierst, die so genau bestimmt werden soll. Beispiel:
Code:
void loop()
{
  noInterrupts();
  // zeitkritischer Code hier
  interrupts();
  // sonstiger Code hier
}

Ansonsten hast Du hier ja schon Hinweise zur Programmierung von Timern bekommen.
Pages: 1 ... 84 85 [86] 87 88 ... 220