Show Posts
Pages: 1 [2] 3 4 ... 216
16  International / Deutsch / Re: Ethernetshield funktioniert nur auf Arduino Board. on: Today at 09:11:14 am
Die beiden beschreiben des isp des Uno.

Ich habe es aber so verstanden, dass du ein Ethernet Shield an einen  "Standalone" atmega328 anschießen möchtest.

Jo so ist es auch nur brauche ich ja das Pinout des ISP Steckers um zu wissen wo auf den sechs Pins SCK, MISO, usw liegen., um es auf das Shield zu übertragen so wie weiter oben empfohlen wurde.

Dann vergiss alles, was ich oben geschrieben habe!
Ich habe irgendwie gelesen, dass Du mit einem Arduino MEGA verkabeln möchtest, ohne ein Shield zu stecken.
Aber das möchtest Du ja gar nicht.
Mein Fehler. Ich hätte wohl mehr das Buzzword "Atmega328" im Text benötigt um zu erkennen, was Du tatsächlich vorhast. Da Du nur "ATMega" geschrieben hast, bin ich von einem MEGA2560 ausgegagen, der verkabelt werden soll und dabei Probleme macht.

17  International / Deutsch / Re: invalid operands on: Today at 09:01:59 am
Nach dem Code hab ichs doch wieder als Array in der Variable ip, oder?

Ja. Dann hast Du aus dem 15-Byte langen ASCII-String eine 4-Byte IP-Nummer gemacht.

Und ich wills auch nicht per Serial verschicken, das bleibt auf diesen einem Board.

Du möchtest aber die 4-Byte IP-Nummer vielleicht als IP-Nummer mit der Ethernet-Library verwenden.

Oder auch die 4-Byte IP-Nummer im EEPROM speichern, als Konfigurationsdaten, die nach dem Abschalten des Stroms gespeichert blieben sollen.
18  International / Deutsch / Re: DS18B20 auf Atmega8 on: Today at 08:57:07 am
Mir würde auch reichen wenn es ohne komma wäre.
Also also ganze Zahl, 19,5 Grad == 195 oder 1950

Also ich sehe nur eine einzige Gleitkommadivision in Deinem Code:
Code:
celsius = (float)raw / 16.0;

Deine Division durch 16 ist quasi eine Multiplikation mit 0.0625, weil 1/16=0.0625

Daher kannst Du die Temperatur ganz einfach als "long" Wert in Zehntausendstel Grad bekommen, wenn Du Deinen raw-Wert mit 625 multiplizierst.

Code:
long celsius10000= raw*625L;

Also 19,5°C wären dann 195000 als long.
Mit der richtigen Rundung und einer Integer-Division durch ein Vielfaches von 10 kannst Du die Zehntausendstel Grad dann auch wieder runterrechnen auf einen Integer in Zehntelgrad oder Hundertstelgrad. Und das Programm sollte deutlich kleiner als vorher sein, weil die Math-Library für Gleitkommaarithmetik nicht mit eingebunden werden braucht.
19  International / Deutsch / Re: invalid operands on: Today at 08:30:27 am
Richtig. Also ich will die IP-Adresse mit allen 12 Ziffern (also auch die 0'en) und den drei Punkten anzeigen lassen und jede Ziffer einzelnd ändern können und das brauch ich dann später für's Ethernet (womit ich mich aber bisher noch gar nicht auseinander gesetzt hab, das kommt als letztes^^).

Und bei mir haperts eben an der Umwandlung.

Anbei Umwandlung eines 15 Zeichen langen Char-Arrays in eine 4-Byte IP-Adresse, die von der Ehternet-Library direkt verwendet werden kann.

Code:
#include <SPI.h>
#include <Ethernet.h>

IPAddress ip(0,0,0,0);
char server_ip_z[16]="192.168.002.178";

void setup() {
  Serial.begin(9600);
 
  // Umwandlung der vier Zahlen in die vier Bytes der IP-Adresse
  for (int i=0;i<4;i++) ip[i]=atoi(&server_ip_z[4*i]);

  // Ausgabe der umgewandelten IP
  for (int i=0;i<4;i++)
  {
    Serial.print(ip[i]);
    if (i<3) Serial.print('.');
  }
  Serial.println();
}

void loop() {
}
20  International / Deutsch / Re: DS18B20 auf Atmega8 on: Today at 08:17:52 am
Was kann da noch gelöscht werden?

Sobald Du in Deinem Sketch eine einzige Gleitkommeberechnung drin hast, wird eine ca. 1,4 KB große Gleitkomma-Library zu Deinem Programm dazugelinkt.

Wenn Du in einem Programm ohne Gleitkommarechnungen auskommst, wird das Programm gleich ca. 1,4 KB kleiner.

Temperaturen könnte man z.B. statt als Gleitkommazahl als Integerwert behandeln, z.B. als ganze Zahl "Temperatur in Zehntelgrad" oder bei höheren Anforderungen als ganze Zahl "Temperatur in Hundertstelgrad".

Dein Temperatursensor macht das intern ja auch: Seine Temperaturen sind intern dargestellt nur 9, 10, 11 oder 12 einzelne Bits und keine Gleitkommazahl.
21  International / Deutsch / Re: invalid operands on: Today at 08:10:13 am
Jurs: Genau.
Ich hab halt die IP-Adresse am Display (mit Punkten eigentlich) stehen und will mit den links/rechts-Tasten den Cursor zwischen den Ziffern navigieren und mit den rauf/runter-Tasten die Ziffern um eine Stelle verändern.

Also hast Du einen String aus Ziffern und Punkten wie z.B.
Code:
char server_ip_z[16]="192.168.2.178";
und dieser String soll dann in eine IP-Adresse umgewandelt werden, die Du mit der Ethernet-Library verwenden kannst?

Oder noch anders?
22  International / Deutsch / Re: Mit Taster while beenden on: Today at 08:04:43 am
So sieht die while aus.
 while (bereitschaft == LOW)

Das ganze soll später für mein Wecker sein.
Er soll halt so lange klinkeln bis der Taster gedrückt wird.

Könnte mir jemand bitte ein Tipp geben wie ich es anstelle?

Du musst den Taster innerhalb der while-Schleife auslesen, damit sich die geprüfte while-Bedingung überhaupt ändern kann. Wenn Du die Variable bereitschaft innerhalb der while-Schleife nicht änderst, behält sie immer denselben Wert, die sie am Anfang der while-Schleife bereits hat.

Also entweder so ändern:
Code:
while (bereitschaft == LOW)
{
  bereitschaft=digitalRead(BEREITSCHAFTSPIN);
}

Oder so:
Code:
while (digitalRead(BEREITSCHAFTSPIN) == LOW);
23  International / Deutsch / Re: invalid operands on: Today at 07:53:49 am
Okay, dann bräuchte ich mal nen anderen Anstoß, wie ich den Array mit den einzelnen Ziffern in eine Variable gepackt krieg. Ausgangspunkt ist der Array mit den 12 Ziffern, die am Ende die IP-Adresse ergeben sollen.

Also als Input hast Du sowas wie einen String/Char-Array mit 12 ASCII-codierten Ziffern, und daraus sollen die vier Bytes für eine IP-Adresse gebildet werden?

Also Input sowas wie:
Code:
char server_ip_z[]="192168002178";
Und daraus soll etwas in der Art als Array werden, um es als IP-Adresse verwenden zu können:
Code:
server_ip[0]=192;
server_ip[1]=168;
server_ip[2]=2;
server_ip[3]=178;
???
24  International / Deutsch / Re: Schnelle Impulse mit Analogread erfassen on: Today at 07:44:32 am
echt vielen dank nocheinmal. das ganze funktioniert nun genau so wie ich es möchte.

Na bravo!

Aber wenn das Gerät für irgendwas anderes als zu Vorführ- und Demonstrationszwecken eines Prototypen verwendet werden soll, würde ich nochmal über das Konzept der Stromversorgung nachdenken, das nun wohl bei Dir zwei verschiedenen Batterietypen vorsieht, die auch nicht lange durchhalten.

Das zu prüfende Gerät läuft doch wohl mit Netzstrom aus der Steckdose? Dann würde ich für das Arduino-Prüfgerät auch ein Netzteil statt Batteriebetrieb vorsehen: Für das Prüfgerät ein ausreichend stark dimensioniertes 5V-Netzteil vorsehen, z.B. 5V/2500mA. Und dieses ausreichend dimensionierte Netzteil versorgt dann sowohl das Arduino-Board am 5V Pin als auch den Servo an seinem VCC-Pin. Das spart dann auf jeden Fall schon mal häufige Batteriewechsel.
25  International / Deutsch / Re: Ethernetshield funktioniert nur auf Arduino Board. on: Today at 07:16:40 am
Für CS muss man glaube ich nicht den Hardware Pin nehmen. Den kann man frei in der Software vergeben.

Allgemein wird glaube ich CS meistens in Software geschaltet.

Ganz genau: Die Software entscheidet, ob es auf dem SPI-Bus funktioniert.

Und auch hier gilt dann wieder das GIGO-Prinzip wie beim Mülleimer: Garbage In ==> Garbage Out

Die beste Hardware kann nur dann funktionieren, wenn sie von der Controller-Software korrekt angesteuert wird.

Aber den verwendeten Arduino-Sketch, der nicht funktioniert, möchte der Threadstarter wohl nicht vorzeigen. Sonst hätte er den ja zusammen mit Schaltbild/Verkabelung gleich zu Anfang gepostet. Hat er aber nicht, keine Ahnung warum nicht.
26  International / Deutsch / Re: invalid operands on: Today at 07:07:46 am
Code:
server_ip = (server_ip_z[0] * 100) + (server_ip_z[1] * 10) + server_ip_z[2] + "." + (server_ip_z[4] * 100) + (server_ip_z[5] * 10) + server_ip_z[6] + "." + (server_ip_z[8] * 100) + (server_ip_z[9] * 10) + server_ip_z[10] + "." + (server_ip_z[12] * 100) + (server_ip_z[13] * 10) + server_ip_z[14];

Was soll denn der Quatsch machen?

"server_ip" ist von Dir als Integer-Array deklariert, d.h. wenn Du "server_ip" ohne alles schreibst, ist das die "Zeigeradresse im RAM, wo sich das Array im RAM befindet" und "server_ip[zahl]"  bzeichnet einen Integer-Wert.

In Deiner Programmzeile versuchst Du nun, eine "gemischte Addition" aus einem bunten Sammelsurium von  Integer-Werten und Stringkonstanten irgendwie "zusammenzuzählen" (dazu wohl das "+" Zeichen) und die Summe (also eine Zahl?) soll dann die Zeigeradresse im RAM bezeichnen, an der das Array im RAM liegt?

Dass das ein völliger Bockmist ist, erkennt der Compiler und zeigt Dir eine Fehlermeldung.
So what?

Es gilt beim C-Programmieren das GIGO-Prinzip wie bei einem Mülleimer: Garbage In ==> Garbage Out

Und fehlerfrei compilieren kannst Du nur solchen Code, der wenigstens syntaktisch soweit korrekt ist, dass er kompiliert werden kann.

Also nochmal: Was soll das werden?
27  International / Deutsch / Re: Ethernetshield funktioniert nur auf Arduino Board. on: Today at 06:43:04 am
Also Fazit es funktioniert nun auch nicht.

Du beachtest den hardwaremäßigen Cable-Select Pin  weder bei der Hardwareverkabelung noch (vermutlich) bei der Software.

Nur wenn die Hardware funktionstüchtig verkabelt ist UND die Software die verkabelte Hardware korrekt ansteuert, kann ein SPI-Gerät (wie z.B. der W5100 Ethernet-Chip) funktionieren.
28  International / Deutsch / Re: Hausbeleuchtung Modellbahn on: Today at 05:23:24 am
Aus Platzgründen würde ich gerne mit Kupferlackdraht arbeiten. Muss ich, solange ich nur eine LED betreiben möchte (Drahtlänge nicht mehr als 10cm, also nur im Haus) einen bestimmten Durchmesser einhalten? Sonst hätte ich jetzt 0,15 oder 2mm genommen.

Laut dem Rechner http://chemandy.com/calculators/round-wire-resistance-calculator.htm haben 20 cm Kupferdraht (10 cm Entfernung = 20 cm Drahtlänge wg. Hin- und Rückweg für den Strom) von 0,15mm Durchmesser ca. 0,2 Ohm Widerstand.

Nach der üblichen Formel P=R*I2 ergibt das bei 20 mA eine Verlustleistung von:
P = 0,2 Ohm * 0,022 Ampere = 0,00008 Watt = 0,08 Milliwatt

Das dürfte zu vernachlässigen sein.
29  International / Deutsch / Re: Haussteuerung - Viele Taster abfragen (und entprellen) on: Today at 04:55:52 am
Erfahrung mit Abfrage von vielen Tastern. Und meine eigentliche Frage hat jurs sehr gut beantwortet. Werde mit den Hinweisen und den beiden Libs vom Anfang weiter testen.

Du brauchst keine Libs. Das wird höchstens eine Verschwendung von RAM-Speicher und es wird ineffizient, wenn Du für jeden gewöhnlichen Taster ein Button-Objekt anlegt, das dann eigene Zeit-Merker zum Entprellen als RAM-Speicher reserviert.

Was Du für "normale" Taster zur Auswertung brauchst, ist nur eine Tasterabfrage, die alle fünf Millisekunden aufgerufen wird. Unter "normale" Taster verstehe ich Taster, die
- ein Signal erzeugen, wenn sie gedrückt werden
- und optional ggf.  auch dann, wenn sie losgelassen werden
Durch die Abfrage in einem Takt oberhalb der normalen Prellzeit mechanischer Taster ist das Signal dann automatisch entprellt.

Programmgrundgerüst ungefähr:
Code:

#define PRELLZEIT 5 // Angenommene maximale Prellzeit mechanischer Taster in Millisekunden

void tasterabfrage()
{
  // hier den Code zum Abfragen der 50 Taster einfügen
  // einfach in einer for-Schleife alle Taster durchgehen
}

void setup() {
}

unsigned long letzteTasterabfrage;
void loop() {
  if (millis()-letzteTasterabfrage>PRELLZEIT)
  {
    letzteTasterabfrage=millis();
    tasterabfrage();
  }
  // hier den restlichen Code, der nicht viel länger als ca. 4,5 Millisekunden laufen sollte
}

Brauchst Du nur solche "normalen" Taster wie beschrieben? Oder brauchst Du auch "Spezialtaster", bei denen Du abfragen möchtest auf:
- Doppelklick (Taster zweimal schnell hintereinander gedrückt)
- langer Klick (Taster drücken, "lange" festhalten, dann loslassen
???
30  International / Deutsch / Re: Ethernetshield funktioniert nur auf Arduino Board. on: Today at 04:28:14 am
ein Ethernetshield auf Header mit an den ATMega gepackt
...
Verbunden sind die Pins 10-13

Das sind die SPI-Pins vom UNO, aber es sind NICHT die SPI-Pins vom MEGA.
Pages: 1 [2] 3 4 ... 216