Der AVR-/ARDUINO-Faden

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Benutzeravatar
xoexlepox
Beiträge: 4814
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Der AVR-/ARDUINO-Faden

Beitrag von xoexlepox »

Die Sekundenzählung kann man doch sicher in einer Funktion abfertigen? Hat jemand eine Idee?
Hast du eine "left" oder "substr"-Funktion, die von einem String die linken N Zeichen abschneidet? Dann kannst du ein Array mit den kompletten 60 Zeichen füllen, und nur die Anzahl Zeichen ausgeben, die dein Sekundenzähler angibt. Eine andere Variante wäre eine Schleife, die bis zum Sekundenzähler läuft, und bei jedem Durchlauf ein Zeichen ausgibt. Ist der Schleifenzähler durch 5 teilbar (" i%5 == 0" ) wird ein "|" ausgegeben, sonst ein '.'.
Anse
Beiträge: 2278
Registriert: Mo 12. Aug 2013, 21:30
Wohnort: Bühl (Baden)

Re: Der AVR-/ARDUINO-Faden

Beitrag von Anse »

Code: Alles auswählen



void draw_sec_bargraph(int S)
{

display.setCursor(0, 15);

   for(i=0;i<S;i++)
  {
       if(!(i%15))//Wen durch 15 teilbar dann Maker
       {
         Diplay.print("|");
       }
        else//Sonst Punkt
       {
         Diplay.print(".");
       }
    }
//ggf. den Bereich der noch leer bleibt "aufräumen"
    for(i=0;i<(128-S);i++)
   {
    Diplay.print(" ");
   }
}

//END



Es gäbe noch einen etwas komplexeren Ansatz, der nicht immer alles neu Zeichnet.
Benutzeravatar
Heaterman
Beiträge: 3990
Registriert: Fr 28. Jun 2013, 10:11
Wohnort: Am Rand der Scheibe, 6 m unter NN

Re: Der AVR-/ARDUINO-Faden

Beitrag von Heaterman »

Vielen Dank für die Antworten. War der richtige Denkanstoß. Nach Anpassung hat Anses Code geklappt - vielen Dank!
Benutzeravatar
Heaterman
Beiträge: 3990
Registriert: Fr 28. Jun 2013, 10:11
Wohnort: Am Rand der Scheibe, 6 m unter NN

Re: Der AVR-/ARDUINO-Faden

Beitrag von Heaterman »

Nächste Hürde bei meiner Wortuhr, Zuweisung von festen Texten bei bestimmten Zeiten. Sorry, Gelegenheitsprogrammierer halt, aber ich partout eine deutsche Wortuhr auf einem Display statt LED-Matrix zusannenbauen.

Hab ich so versucht:

Code: Alles auswählen

if (m == 25 && h == 0 || h == 12) goto label1;


  if (m == 25 && h == 1) goto label2;

  {
label1:
    display.clearDisplay();
    display.setCursor(0, 0);
    display.print("Es ist  F \232 n f   vor");
    display.setCursor(3, 9);
    display.print("H a l b   E i n s" );
  }
  {
label2:
    display.clearDisplay();
    display.setCursor(0, 0);
    display.print("Es ist  F \232 n f   vor");
    display.setCursor(3, 9);
    display.print("H a l b   Z w e i" );
  }
}
Aber hier geht die Anzeige nach Start der Uhr genau auf die Anzeige von Label2 und bleibt da. Wo hab ich jetzt die Klammern falsch gesetzt?
Oder kann man da besser ein Array oder sogar eine lib bilden, was man abfragt? Aber wie geht sowas?

Die Alternative war, jede einzelne in Frage kommende Anzeige mit if...print... platt auszugeben, funktioniert, aber das übersteigt sofort den Speicher des AVRs. Die goto-Methode spart enorm Speicher, aber wo hab ich mich da verrannt?
manuel
Beiträge: 764
Registriert: Fr 7. Feb 2014, 00:14

Re: Der AVR-/ARDUINO-Faden

Beitrag von manuel »

Der geht schon zu label 1, aber darunter ist label 2 und der part wird auch ausgeführt. Das heisst dein display zeigt ganz kurz fünf von halb ein an, uns dann fünf vor halb 2, so schnell das du es nicht siehst.

Aber mal im ernst willst du jede Permutation von Stunde und Minute einzeln behandeln ? Erstmal sind Stunde und Minute unabhängig, kann also anstatt mit quadrat nur mit Faktor 2 gebastelt programmiert werden, und noch einfacher wärs wenn du die stunden und minuten/5 direkt als look up index inner Tabelle nimmst.
Benutzeravatar
ferdimh
Beiträge: 9379
Registriert: Fr 16. Aug 2013, 15:19

Re: Der AVR-/ARDUINO-Faden

Beitrag von ferdimh »

Die goto-Methode spart enorm Speicher, aber wo hab ich mich da verrannt?
Die interessante Fragestellung ist eher, warum die Goto-Methode Speicher spart. Das sollte sie eigentlich nicht...
Durch Aufteilung des Ganzen in "es ist x vor/nach" und halbe Stunden sollte sich der Code aber ausreichend verkleinern lassen, dass das in den Speicher passt.
Benutzeravatar
xoexlepox
Beiträge: 4814
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Der AVR-/ARDUINO-Faden

Beitrag von xoexlepox »

Code: Alles auswählen

if (m == 25 && h == 0 || h == 12) ...
Uhhh.... Ich weiß, es gibt eine "operator precedence", ich hätte aber heftige Probleme nun zu sagen, wie diese Zeile wirkt ( was passiert z.b. bei m=24 und h=12 ?). Bei verschiedenen Operatoren in einer Zuweisung/Bedingung setze ich grundsätzlich entsprechende Klammern -> Es erleichtert zumindest das Lesen des Codes ;)
Benutzeravatar
Heaterman
Beiträge: 3990
Registriert: Fr 28. Jun 2013, 10:11
Wohnort: Am Rand der Scheibe, 6 m unter NN

Re: Der AVR-/ARDUINO-Faden

Beitrag von Heaterman »

:oops: :oops: Ja, ich bin so ein Spaghettiprogrammierer, man sieht auch immer wieder, dass ich aus der BASIC-Ecke komme, :mrgreen:

Ich werde das mal nach ferdis Vorschlag neu sortieren...
sysconsol
Beiträge: 4059
Registriert: Fr 8. Jul 2016, 17:22

Re: Der AVR-/ARDUINO-Faden

Beitrag von sysconsol »

Ich habe eine RTC Typ DS1302Z hier liegen.
Der Code vom User Krodal im Arduino-Playground funktioniert,
wenn er direkt in der Sketch liegt.

Nun wollte ich aus dem Code eine Bibliothek machen.
Die Definitionen samt Deklarationen in eine Header-Datei, die Funktionen in eine cpp-Datei.
Schrieb man im Roboternetz.
Aber was mache ich mit der Struktur?

Code: Alles auswählen

typedef struct ds1302_struct
Das Setzen der Zeit über

Code: Alles auswählen

memset ((char *) &rtc, 0, sizeof(rtc));
hätte ich in eine Funktion verbaut und mit in die cpp-Datei gelegt.

Ich denke, da fehlt mir etwas Wissen zu den C++-Gerüsten :oops:
Benutzeravatar
Heaterman
Beiträge: 3990
Registriert: Fr 28. Jun 2013, 10:11
Wohnort: Am Rand der Scheibe, 6 m unter NN

Re: Der AVR-/ARDUINO-Faden

Beitrag von Heaterman »

Warum nimmst Du keine fertige Bibliothek, z. B. die von Adafruit?

Ich fingere auch gerade an dem Problem mit dem Stellen rum. Momentan stelle ich den RTC durch einen ganz kurzen Sketch über das Terminal, da kann man die Verzögerung fürs Hochladen einrechnen. Danach kommt das normale Programm auf den AVR und ernährt sich vom zuvor gestellten RTC.
Normalerweise holt man ja per lib die Zeit zum Zeitpunkt des Compilierens vom Rechner, aber das ist eben ungenau, je nach Länge des Compilierens/Hochladens. Noch besser würde ich ein manuelles Stellen des RTC per Hardwaretasten finden, aber das hab ich noch nicht raus. Aber solange die Batterie für den RTC geht, reicht ja eigentlich das Stellen per Terminal.
sysconsol
Beiträge: 4059
Registriert: Fr 8. Jul 2016, 17:22

Re: Der AVR-/ARDUINO-Faden

Beitrag von sysconsol »

Weil keine andere funktioniert.

Edit 20:56: Gerade noch etwas gefunden, was funktioniert: https://github.com/msparks/arduino-ds1302
Sir_Death
Beiträge: 3446
Registriert: Mo 11. Mai 2015, 22:36
Wohnort: südlich von Wien

Re: Der AVR-/ARDUINO-Faden

Beitrag von Sir_Death »

naja. bei 1302 und 1307 kann man fast gleich weg lassen. - mehrere Minuten pro Tag sind keine Seltenheit. Nimm doch eine 3231

https://forum.arduino.cc/index.php?topic=377472.0
und die Lib geht jedenfalls: https://github.com/JChristensen/DS3232RTC

EdIt: Zahlendreher..
sysconsol
Beiträge: 4059
Registriert: Fr 8. Jul 2016, 17:22

Re: Der AVR-/ARDUINO-Faden

Beitrag von sysconsol »

Mit der bereits oben schon verlinken DS1302-Bibliothek von msparks habe ich noch ein Verständnisproblem.

Ich möchte die Zeit setzen - per Terminal.

Das Beispiel macht das in der Sketch wie folgt (ohne Terminal):

Code: Alles auswählen

// Make a new time object to set the date and time.
// Sunday, September 22, 2013 at 01:38:50.
   Time t(2013, 9, 22, 1, 38, 50, Time::kSunday);
   rtc.time(t); // setzt die Zeit
Im Headerfile steht dazu:

Code: Alles auswählen

// Class representing a particular time and date.
class Time {
 public:
  enum Day {
    kSunday    = 1,
    kMonday    = 2,
    kTuesday   = 3,
    kWednesday = 4,
    kThursday  = 5,
    kFriday    = 6,
    kSaturday  = 7
  };

  // Creates a Time object with a given time.
  //
  // Args:
  //   yr: year. Range: {2000, ..., 2099}.
  //   mon: month. Range: {1, ..., 12}.
  //   date: date (of the month). Range: {1, ..., 31}.
  //   hr: hour. Range: {0, ..., 23}.
  //   min: minutes. Range: {0, ..., 59}.
  //   sec: seconds. Range: {0, ..., 59}.
  //   day: day of the week. Sunday is 1. Range: {1, ..., 7}.
  Time(uint16_t yr, uint8_t mon, uint8_t date,
       uint8_t hr, uint8_t min, uint8_t sec,
       Day day);

  uint8_t sec;
  uint8_t min;
  uint8_t hr;
  uint8_t date;
  uint8_t mon;
  Day day;
  uint16_t yr;
};
Ich habe dann versrucht, per Terminal
- einen String einzulesen -> funktioniert
- in Teilstrings zu zerlegen -> funktioniert
- die Teilstrings in uint8_t zu konvertieren -> funktioniert

Nur mit dem Day komme ich nicht klar.
Folgende Codeschnipsel aus dem Sketch:

Die Eingabe am Terminal zum Setzen lautet (\n -> newline-character)

Code: Alles auswählen

set20180313090100Tuesday\n
Das kommt auch so im String temp an.

Es folgt

Code: Alles auswählen

Serial.println(temp); // Eingabe anzeigen zwecks Kontrolle, zum Jahr hin muss eine freie Zeile sein!!
// Eingabe zerschneiden in einzele Strings und diese zu uint8_t konvertieren
jahr = temp.substring(3, 7).toInt();
monat = temp.substring(7, 9).toInt();
tag = temp.substring(9, 11).toInt();
stunde = temp.substring(11, 13).toInt();
minute = temp.substring(13, 15).toInt();
sekunde = temp.substring(15, 17).toInt();

temp = temp.substring(17); // Tagesname mit newline in temporären String ablegen
// Länge Tagesname mit newline ermitteln    
// newline brauchen wir nicht mehr 
// newline abschneiden, nur den Tagesnamen behalten    
temp.remove((temp.substring(17).length()) - 1); 
wochentag = String("k" + temp); // dem Tagesnamen ein "k" voranstellen (siehe enum Day in Headerfile)

// so war das gedacht, funktioniert jedoch nicht:
// Time t(jahr, monat, tag, stunde, minute, sekunde, wochentag);
// no matching function for call to 'Time::Time(uint16_t&, uint8_t&, uint8_t&, uint8_t&, uint8_t&, uint8_t&, String&)'

// so geht es auch nicht:
// Time t(jahr, monat, tag, stunde, minute, sekunde, Time::wochentag);
// 'wochentag' is not a member of 'Time' --> logisch, nur: wie drücke ich aus, dass der Inhalt von "wochentag" eingesetzt werden soll?
    
// so funktioniert das prinzipiell, nur der Wochentag lässt sich nicht setzen:
Time t(jahr, monat, tag, stunde, minute, sekunde, Time::kTuesday);
rtc.time(t);
    
// auch folgendes funktioniert nicht:
// rtc.time(jahr, monat, tag, stunde, minute, sekunde, Time::kTuesday);
    
rtc.halt(false); // RTC wieder laufen lassen
halten = false; // ein Merker für den Zustand, unkritisch
Serial.println(jahr);
Serial.println(monat);
Serial.println(tag);
Serial.println(stunde);
Serial.println(minute);
Serial.println(sekunde);
Serial.println(wochentag);
Sketch (in .ino umbenennen)
RTC_V00.txt
(4.5 KiB) 61-mal heruntergeladen
Das dürfte wieder auf ein C++-Verständnisproblem hinauslaufen :oops: - Was mache ich falsch?
Anse
Beiträge: 2278
Registriert: Mo 12. Aug 2013, 21:30
Wohnort: Bühl (Baden)

Re: Der AVR-/ARDUINO-Faden

Beitrag von Anse »

Funktioniert die Wandlung von Day String zu int?
Warum kann man den Tag nicht auch einfach mit einer Zahl setzen?
sysconsol
Beiträge: 4059
Registriert: Fr 8. Jul 2016, 17:22

Re: Der AVR-/ARDUINO-Faden

Beitrag von sysconsol »

Eben nicht.
Wenn ich den Tag als String einsetze, dann funktioniert es ja nicht mehr.

Oder verstehe ich deine Frage falsch?

Warum kann man den Tag nicht auch einfach mit einer Zahl setzen?
Du meinst, die Time-Funktion nicht ein enum erwarten lassen, sondern ein uint8_t?
Muss ich mal probieren.

Edit 18:11: Die Ausgabe funktionier schon, nur die Eingabe (setzen) funktioniert nicht mehr. Muss mir etwas mehr Verständnis besorgen.
Anse
Beiträge: 2278
Registriert: Mo 12. Aug 2013, 21:30
Wohnort: Bühl (Baden)

Re: Der AVR-/ARDUINO-Faden

Beitrag von Anse »

sysconsol hat geschrieben:Du meinst, die Time-Funktion nicht ein enum erwarten lassen, sondern ein uint8_t?
Muss ich mal probieren.
In den String

Code: Alles auswählen

set20180313090100 2 \n
Statt Tuesday einfach eine 2 einfügen wie gezeigt, natürlich ohne Leerzeichen. Dann wie der Rest auslesen und umwandeln.

Alternativ kannst Du auch eine eigenen Funktion schreiben die aus "Tuesday" eine 2 macht und mit den anderen Tagen natürlich auch.
Geht auch mit Ersetzen im String.

Ich hätte das ganze mehr in dem Format gemacht:

Code: Alles auswählen

SetDate: 13.3.2018
SetWeekDay: 2
SetTime: 18:45:00
Vorteil:
-einzelne Datensätze können getrennt geschrieben werden. Z.B. wenn man nur die Zeit ändern will.
-Schön übersichtlich
-Leicht zu implementieren aber nur wenn es um noch mehr ähnliche Datensätze gibt damit es sich lohnt.

Beim Interpretieren wird nach den jeweiligen Schlüsselwörtern gesucht. Die Schlüsselwörter geben dann auch gleich an wie der folgende Stringabschnitt zu verstehen ist. Die Trennzeichen sind auch hilfreich beim interpretieren.
Nur mal so als Anregung.
sysconsol
Beiträge: 4059
Registriert: Fr 8. Jul 2016, 17:22

Re: Der AVR-/ARDUINO-Faden

Beitrag von sysconsol »

So einfach (statt Tagesnamen die Ziffer schreiben) geht das nicht.
Da müsste man irgendwie umwandeln, was ich aber nicht hinbekommen habe.

Ich habe jetzt die Bibliothek abgeändert.
Damit funktioniert das ohne die Tage beim Namen zu kennen.
Die Umwandelei ist mir persönlich zu verkompliziert worden.
Wenn ich das Chaos bereinigt habe, kann ich das gerne hier einstellen.

Die Formatierung der Ausgabe (Reihenfolge von Jahr, Monat,...) ist ein geringeres Problem und bereits gelöst.

Danke!
sysconsol
Beiträge: 4059
Registriert: Fr 8. Jul 2016, 17:22

Re: Der AVR-/ARDUINO-Faden

Beitrag von sysconsol »

Hier die modifizierte Bibliothek.
Im Beispiel-Ordner ist die Sketch zum Setzen der Zeit enhalten.

(ich hoffe, ich verstoße mit dem Einstellen nicht gegen irgendwelche Rechte)
Dateianhänge
arduino-ds1302-wo-dayname.zip
(151.71 KiB) 63-mal heruntergeladen
Sir_Death
Beiträge: 3446
Registriert: Mo 11. Mai 2015, 22:36
Wohnort: südlich von Wien

Re: Der AVR-/ARDUINO-Faden

Beitrag von Sir_Death »

Jungs, ich brauch mal eure Hilfe - meine C-Kenntnisse sind schon seit 20 Jahren verrostet.

Gegeben: 2 Stück 3D-Drucker und eine Käsefräse, alle 3 mit Arduino Mega 2560 und RAMPS.
Unterschied: der USB-Chip 1 x der 16U2 und 2 x der CH340

Plan: Es soll eine Handsteuerung für die 3 Geräte her, die ich einfach anstecken (bzw. zwischen PC und Maschinensteuerung rein stecke)
Lösung: Noch ein Arduino Mega mit dem USB-Host-Shield.
Kommunikation mit allen 3en klappt schon mal, aber: es müssen unterschiedliche Treiber für den 16U2 und die CH340 geladen werden.
Nachdem ich die Handsteuerung einfach umstecken können will, fällt jedes mal neu compilieren aus.

Frage: Kann mir irgendjemand helfen, diesen Sourcecode so umzustricken, dass der Arduino beim Start entscheiden kann, welchen Treiber er lädt? - gerne spendiere ich einen Schalter an einem Eingang, mit dem ich den gewünschten Treiber signalisiere.
Hauptproblem: Die Programmierer der beiden Libraries (cdcacm.h und cdc_ch34x.h) haben teilweise die gleichen Variablennamen verwendet - spießt sich also auch schon mal dort.

Library: https://github.com/felis/USB_Host_Shield_2.0
Zusätzlich sind noch die beiden angehängten Dateien für den CH340 notwendig (habe ich in einem japanischen Forum gefunden - Google Translate macht es lesbar: http://www.suke-blog.com/arduino_usb_ho ... ith_ch340/

Code: Alles auswählen

// General definitions
#include <SPI.h>
uint16_t rcvd = 0;
byte data = 0;
byte i = 0;
byte buf[64];

// Arduino with 16U2 Interface-Chip
#include <cdcacm.h>

class MyAsyncOper : public CDCAsyncOper {
  public: byte OnInit(ACM *pacm) {
    LINE_CODING  lc;
    lc.dwDTERate  = 250000;
    lc.bCharFormat  = 0;
    lc.bParityType  = 0;
    lc.bDataBits  = 8;
    pacm->SetLineCoding(&lc);
  }
};

USB           Usb;
MyAsyncOper   AsyncOper;
ACM           Acm(&Usb, &AsyncOper);

//Arduino with CH340 Interface-Chip
/*#include <cdc_ch34x.h>
 
class MyAsyncOper : public CDCAsyncOper {
  public: byte OnInit(CH34X *pch34x) {
    LINE_CODING lc;
    lc.dwDTERate = 250000;
    lc.bCharFormat = 0;
    lc.bParityType = 0;
    lc.bDataBits = 8;
    lc.bFlowControl = 0;
    pch34x->SetLineCoding(&lc);
  }
};

USB         Usb;
MyAsyncOper AsyncOper;
CH34X       Acm(&Usb, &AsyncOper);*/

void setup()
{
  Serial.begin(250000);
  Usb.Init();
}

void loop()
{
  Usb.Task();

  // Arduino with 16U2 Interface-Chip
  rcvd = 64;
  //Arduino with CH340 Interface-Chip
  //rcvd = 32;

  if( Acm.isReady()) {
    if(Serial.available()) {
      data= Serial.read();
      Acm.SndData(1, &data);
    }
    Acm.RcvData(&rcvd, buf);
    if( rcvd ) for(i=0; i < rcvd; i++ ) Serial.print((char)buf[i]);
  }
}
Ich wäre für Hilfe sehr dankbar, denn das ist jedenfalls jenseits meiner Grenzen. - Bin froh, dass ich den Sourcecode so weit vereinfachen konnte.
Benutzeravatar
gafu
Beiträge: 6376
Registriert: Mi 14. Aug 2013, 20:56
Wohnort: nahe Jena
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von gafu »

Ich hab mal eine Frage:

Ich hab eine steuerung mit einem Atmega2560 prozessor.
Der hat ja 1000 beinchen, und eben auch welche, die beim "arduino mega" nicht auf buchsenleisten herausgeführt sind, und deshalb beim pin-mapping auch keine nummer in den üblichen übersichten haben.
z.B. Pin 69 "Port J bit 6"

Wie steuere ich den denn an mit den üblichen mitteln in der arduino ide?
Sir_Death
Beiträge: 3446
Registriert: Mo 11. Mai 2015, 22:36
Wohnort: südlich von Wien

Re: Der AVR-/ARDUINO-Faden

Beitrag von Sir_Death »

Ich vermute mal, auf Fußpilzbasis (Assembler) wird es schon gehen, wenn du die Register direkt ansprichst - frag mich aber bloß nicht wie.

Auf meine Frage (1 weiter oben) gibt es scheinbar noch keine Antwort. Schade :-(
Anse
Beiträge: 2278
Registriert: Mo 12. Aug 2013, 21:30
Wohnort: Bühl (Baden)

Re: Der AVR-/ARDUINO-Faden

Beitrag von Anse »

Sir_Death hat geschrieben:Auf meine Frage (1 weiter oben) gibt es scheinbar noch keine Antwort. Schade
Ich hab von dem arduino-C keine Plan aber vielleicht bring es Dir was:

Code: Alles auswählen

// General definitions
#include <SPI.h>
uint16_t rcvd = 0;
byte data = 0;
byte i = 0;
byte buf[64];

// Arduino with 16U2 Interface-Chip
#include <cdcacm.h>

class MyAsyncOper : public CDCAsyncOper {
  public: byte OnInit(ACM *pacm) {
    LINE_CODING  lc;
    lc.dwDTERate  = 250000;
    lc.bCharFormat  = 0;
    lc.bParityType  = 0;
    lc.bDataBits  = 8;
    pacm->SetLineCoding(&lc);
  }
};

USB           Usb;
MyAsyncOper   AsyncOper;
ACM           Acm(&Usb, &AsyncOper);

//Arduino with CH340 Interface-Chip
/*#include <cdc_ch34x.h>
 
class MyAsyncOper : public CDCAsyncOper {
  public: byte OnInit(CH34X *pch34x) {
    LINE_CODING lc;
    lc.dwDTERate = 250000;
    lc.bCharFormat = 0;
    lc.bParityType = 0;
    lc.bDataBits = 8;
    lc.bFlowControl = 0;
    pch34x->SetLineCoding(&lc);
  }
};

USB         Usb;
MyAsyncOper AsyncOper;
CH34X       Acm(&Usb, &AsyncOper);*/

void setup()
{
  Serial.begin(250000);
  Usb.Init();
 pinMode([Pin mit Schalter], INPUT);//Hier muss ein Pull-up zu Vcc und ein Schalter zu Gnd dran
}

void loop()
{
  Usb.Task();
if (LOW==DigitalReade([Pin mit Schalter]))
{
	// Arduino with 16U2 Interface-Chip
	rcvd = 64;
} 
else
{
	//Arduino with CH340 Interface-Chip
	rcvd = 32;
}
  
  

  if( Acm.isReady()) {
    if(Serial.available()) {
      data= Serial.read();
      Acm.SndData(1, &data);
    }
    Acm.RcvData(&rcvd, buf);
    if( rcvd ) for(i=0; i < rcvd; i++ ) Serial.print((char)buf[i]);
  }
}
An einem Pin muss ein Schalter angeschlossen werden. Wie siehe Kommentar.
gafu hat geschrieben:Ich hab mal eine Frage:

Ich hab eine steuerung mit einem Atmega2560 prozessor.
Der hat ja 1000 beinchen, und eben auch welche, die beim "arduino mega" nicht auf buchsenleisten herausgeführt sind, und deshalb beim pin-mapping auch keine nummer in den üblichen übersichten haben.
z.B. Pin 69 "Port J bit 6"

Wie steuere ich den denn an mit den üblichen mitteln in der arduino ide?
Habs nicht geprüft aber da sie mit C verwand ist könnte das hier gehen:

Code: Alles auswählen

DDRJ|=(1<<6);//Vergleichbar mit PinMode();
PORTJ|=(1<<6);//Setzen
PORTJ&=~(1<<6);//Zurück setzen
Wenn die Konstanten DDRJ usw. nicht bekannt sein sollten müssen an ihrer Stelle die Adressen aus dem Dabla. verwendet werden.
Sir_Death
Beiträge: 3446
Registriert: Mo 11. Mai 2015, 22:36
Wohnort: südlich von Wien

Re: Der AVR-/ARDUINO-Faden

Beitrag von Sir_Death »

Servus Anse

Danke - aber das ist leider nicht des Rätsels Lösung - soweit komme ich zum Glück selbst.
Mein Problem ist, dass die beiden USB-Librarys für den CH340 und den 16U2 die selben public Variablen verwenden, und sich das deswegen beim compilieren beißt...
Und eine Library ändern, damit das geht, übersteigt noch bei weitem meine Fähigkeiten.

Ich versuche mehr oder weniger ein Plug and Play mit Autodetect zu programmieren, wo der Arduino selbst entscheidet, welchen Treiber er lädt.

Inzwischen habe ich (bei 3D-Drucker Firmware abgeschaut) zumindest geschafft, dass ich nicht jedes mal die gesamten Kommentarmarker ändern muss, sondern eine Config-Variable am Anfang, die den Compiler beeinflusst.

EDIT: Und externer Pullup braucht man nicht - einfach INPUT gegen INPUT_PULLUP tauschen ;)
berlinerbaer
Beiträge: 1062
Registriert: Di 22. Aug 2017, 05:19
Wohnort: Berlin

Re: Der AVR-/ARDUINO-Faden

Beitrag von berlinerbaer »

Ohne jetzt den code gelesen zu haben, würde ich bei den sich überschneidenden Variablennamen einfach bei einem der beiden Treiber alle mit einem einheitlichen, kurzen Präfix versorgen, damit nix mehr durcheinander kommt.

Dann per Schalter zwischen beiden hin- und herschalten. Oder, noch simpler, die Buchsen in den zu steuernden Geräten direkt mit der passenden Brücke versehen, dann gehts ganz ohne Nachdenken und Platz genug wäre selbst bei einem DB9-Stecker...

Beim 2560 ist wohl wirklich Datenblattlektüre und eventuell auch inline-Assembler erforderlich.
Benutzeravatar
gafu
Beiträge: 6376
Registriert: Mi 14. Aug 2013, 20:56
Wohnort: nahe Jena
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von gafu »

bei den üblichen 3d-drucker-firmwares gibts ne zweite serielle schnittstelle, z.b. für die steuerrung per bluetooth-modul.

Dort kannst du mit einem beliebigen geräts einfach per seriellem Uart Gcode-befehle reinsenden.
Du musst nur verhindern, das die handsteuerung etwas sendet während auf dem usb auch gcode reinkommt, weil das ineinanedrgewürfelt werden könnte (also auch innerhalb einer zeile)

weiss jetzt gerade nicht welchen entwicklungsstand die cnc-option von repetier firmware haben, aber das mal so als idee was man machen könnte.
Sir_Death
Beiträge: 3446
Registriert: Mo 11. Mai 2015, 22:36
Wohnort: südlich von Wien

Re: Der AVR-/ARDUINO-Faden

Beitrag von Sir_Death »

berlinerbaer hat geschrieben:Ohne jetzt den code gelesen zu haben, würde ich bei den sich überschneidenden Variablennamen einfach bei einem der beiden Treiber alle mit einem einheitlichen, kurzen Präfix versorgen, damit nix mehr durcheinander kommt.
das haut leider nicht hin, da in den Libs einen weiter Lib aufgerufen wird (im Link enthalten), die wieder auf die public-Variablen zugreift - und die kennt sich dann nicht mehr aus. - Nichts anderes, als wenn du im ISO-OSI Modell plötzlich Schicht 3 (oder war es 4?) doppelt hast. Mit wem soll Schicht 2 dann kommunizieren?
berlinerbaer hat geschrieben: Dann per Schalter zwischen beiden hin- und herschalten. Oder, noch simpler, die Buchsen in den zu steuernden Geräten direkt mit der passenden Brücke versehen, dann gehts ganz ohne Nachdenken und Platz genug wäre selbst bei einem DB9-Stecker...
Der Schalter war ja auch so irgendwie die Idee, damit der nicht selbst erkennen muss anhand des USB-Slaves, sondern vor dem Treiber laden weis, welchen.
Leider scheitert es schon beim compilieren - komm also gar nicht so weit.
Und die Buchse lässt sich ein bisserl schwer umbauen, nachdem das USB ist... ;)

@gafu: das ist mal ne Idee! Daran hatte ich noch gar nicht gedacht.
Muss ich morgen mal anschauen, was sich da bei Marlin tut. (Heute ist es schon ein wenig spät :roll: ) - Gute Nacht
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Fritzler »

Sir_Death hat geschrieben:
berlinerbaer hat geschrieben:Ohne jetzt den code gelesen zu haben, würde ich bei den sich überschneidenden Variablennamen einfach bei einem der beiden Treiber alle mit einem einheitlichen, kurzen Präfix versorgen, damit nix mehr durcheinander kommt.
das haut leider nicht hin, da in den Libs einen weiter Lib aufgerufen wird (im Link enthalten), die wieder auf die public-Variablen zugreift - und die kennt sich dann nicht mehr aus. - Nichts anderes, als wenn du im ISO-OSI Modell plötzlich Schicht 3 (oder war es 4?) doppelt hast. Mit wem soll Schicht 2 dann kommunizieren?
Nich im ernst?
Ich dachte solch schlechter Programmierstil ist unter den C Programmierern seit den 2000ern ausgetrieben.
Der OSI Vergleich hinkt, die Schichten sind Modular aufgebaut und sollen nicht ineinander greifen, nur Parameter übergeben.

Wie wärs richtig? So hier:

Code: Alles auswählen

static UART_HandleTypeDef s_UARTHandle;
-------------
    s_UARTHandle.Instance        = USART2;
    s_UARTHandle.Init.BaudRate   = 115200;
    s_UARTHandle.Init.WordLength = UART_WORDLENGTH_8B;
    s_UARTHandle.Init.StopBits   = UART_STOPBITS_1;
    s_UARTHandle.Init.Parity     = UART_PARITY_NONE;
    s_UARTHandle.Init.HwFlowCtl  = UART_HWCONTROL_NONE;
    s_UARTHandle.Init.Mode       = UART_MODE_TX_RX;
    
    if (HAL_UART_Init(&s_UARTHandle) != HAL_OK)
        asm("bkpt 255");
    
    for (;;)
    {
        uint8_t buffer[4];
        HAL_UART_Receive(&s_UARTHandle, buffer, sizeof(buffer), HAL_MAX_DELAY);
        HAL_UART_Transmit(&s_UARTHandle, buffer, sizeof(buffer), HAL_MAX_DELAY);
    }
Da wird ein struct genutzt um das Submodul zu parametrisieren, in diesem struct könnten auch Empfangsbuffer rein.

Oder kurz und knackig selber gebaut:

Code: Alles auswählen

static char usart3_tx_buf[256];
static char usart3_rx_buf[16];
static struct usart_irq usart3_irq;

void init_debugging(void){

	//USART3 Init für dprintf
	fifo_init(&(usart3_irq.tx_fifo), usart3_tx_buf, sizeof(usart3_tx_buf));
	fifo_init(&(usart3_irq.rx_fifo), usart3_rx_buf, sizeof(usart3_rx_buf));
	rcc_enable_clock(RCC_USART3);
	rcc_enable_clock(RCC_GPIOC);
	gpio_initpin(PORTC, 10, AF_PP, GPIO_HS, AF7_USART1_TO_3); //Altfunc TX Pin
	usart_init_irq(&usart3_irq, USART3_INDEX, 115200, 16000000);
	deprintf_setusart(USART3_INDEX, usart_putc);
}
Sir_Death
Beiträge: 3446
Registriert: Mo 11. Mai 2015, 22:36
Wohnort: südlich von Wien

Re: Der AVR-/ARDUINO-Faden

Beitrag von Sir_Death »

Okayyyy...

Sorry ich versteh absolut nur Bahnhofsalat.

Ist das jetzt eine lib für den USB am Arduino, oder was ist das? - Sorry die blöde Frage, aber ich verstehe nur, dass das irgendetwas mit senden und empfangen und den jeweiligen Buffern zu tun hat. Dann ist bei mir Schluss mit C...

Jaja ich weiß- lies ein Buch über C - mach ich, wenn der Tag 72 Stunden hat :-)
Benutzeravatar
Bauteiltöter
Beiträge: 254
Registriert: So 11. Aug 2013, 17:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Bauteiltöter »

Sir_Death hat geschrieben:Jaja ich weiß- lies ein Buch über C - mach ich, wenn der Tag 72 Stunden hat :-)
Wenn du C programmieren willst ohne C zu lernen, dann musst du vielleicht einsehen, dass du nicht jedes Ziel erreichen kannst. Dann funktionieren beide 'Libraries' nebeneinander halt einfach nicht und du musst alternativen suchen.

Ein abstraktes Konzept "ich versuche mehr oder weniger ein Plug and Play mit Autodetect zu programmieren, wo der Arduino selbst entscheidet, welchen Treiber er lädt." ist halt nicht mehr Trivial, sowas funktioniert ja sogar bei Computern immer mal wieder nicht vernünftig und man muss manuell Hand anlegen.
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Fritzler »

Das ist nichts gegen dich, sondern gegen die unfähigen Lib Programmierer ;)
Das wäre total egal welche CPU darunter werkelt, das soll son HAL/Treiber ja abstrahieren.

In dem struct sind Variablen, die definieren wie der UART zu werkeln hat.
Die struct Member Namen und die reingeschriebenen define Werte sprechen ja für sich.

static UART_HandleTypeDef s_UARTHandle; <- struct anlegen
s_UARTHandle.Instance = USART2; <- ansagen welcher UART, hier könnt man auch wegabstrahieren ob UART über USB wie beim 16U4 oder eben "normaler" UART an dem extern nen USB<->UART hängt. (der Treiber/HAL ruft dann eben das passende Submodul auf)
HAL_UART_Init(&s_UARTHandle) <- der eigentliche Init der Hardware

HAL_UART_Receive(&s_UARTHandle, buffer, sizeof(buffer), HAL_MAX_DELAY); <- hier wird beim lesen angegeben von welchem UART gelesen werden soll, das struct könnte schließtlich noch ne Statemachine des Treibers enthalten.

Mein eigener HAL bekommt dann eben gleich noch ne FIFO in Rachen geworfen für den UART IRQ.
fifo_init(&(usart3_irq.tx_fifo), usart3_tx_buf, sizeof(usart3_tx_buf)); <- bekommt den Buffer für die FIFO und speichert das FIFO Objekt im "Instanzobjekt" des HAL/Treiber ab
usart_init_irq(&usart3_irq, USART3_INDEX, 115200, 16000000); <- der Treiber init, hier schreibt nicht der User die Baudrate ins struct, das macht der Treiber selber, der Index wird bei meiner Lib mit angegbene, weil sich der Treiber den Pointer aufs struct merken kann.
deprintf_setusart(USART3_INDEX, usart_putc); <- dem printf sagen, dass er über UART3 ausgeben soll

Beispielhaft sieht der UARt Init dann so aus:

Code: Alles auswählen

#if USART_USE_IRQ
void usart_init_irq(struct usart_irq *idx, unsigned int usart_base, unsigned int baudrate, unsigned int bus_clk){

	volatile struct usart * const usart = (struct usart *)usart_bases[usart_base];
	irq_idx[usart_base] = idx;
	idx->usart_base_addr = usart_bases[usart_base];
	
	usart->CR1 = CR1_UE;
	usart->CR2 = 0;
	usart->CR3 = 0;	
	
	/*
		Baudteiler ist bus_clk/(16 * baudrate)
		Fraction hat 4 bits -> 16
		-> sparen wir uns die 16 und daher diese Formel:
	*/
	usart->BRR = bus_clk/baudrate;
	
	usart->CR1 |= CR1_RXNEIE | CR1_TE | CR1_RE;
	
	nvic_enable_irq(usart_irq_nbrs[usart_base], 0xE, 0xF);
};
#endif
Benutzeravatar
Sunset
Beiträge: 1498
Registriert: Fr 6. Dez 2013, 15:19

Re: Der AVR-/ARDUINO-Faden

Beitrag von Sunset »

Ist ein neuer Arduino mit passendem CH340 nicht die simpelste Lösung?
Vielleicht findet sich ja jemand zum Tauschen, bei dem es egal ist, welche Schnittstelle der Arduino hat?
Sir_Death
Beiträge: 3446
Registriert: Mo 11. Mai 2015, 22:36
Wohnort: südlich von Wien

Re: Der AVR-/ARDUINO-Faden

Beitrag von Sir_Death »

@Bauteiltöter: Hast ja recht - aber darum frag ich ja euch ;)

@Fritzler Aha! Danke für die Erklärung - das Wort "Hardware Abstraktion layer" hab ich schon mal gehört - wird für mich trotzdem ne ordentliche Herausforderung.

@sunset: wollte ich mir sparen, aber ist inzwischrn durchaus mehr als nur einen Gedanken wert. - nachdem ich im ganzen Haus schon um die 20 Arduino Mega verteilt habe, muss ich halt mal suchen gehen, wo ein Tauschkandidat werkelt.

@alle: Danke für eure Geduld - ich glaube, das gewünschte Ziel ist für mich momentan noch unerreichbar.
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Fritzler »

Das mit dem C Buch ist genau andersrum.
Es ist schneller dies zu lesen, als bei jedem Murks perkussionswartung anzuwenden bis es halbwegs läuft.

Zu empfehlen ist das Original:
https://github.com/germanoa/compiladore ... nighan.pdf
Sir_Death
Beiträge: 3446
Registriert: Mo 11. Mai 2015, 22:36
Wohnort: südlich von Wien

Re: Der AVR-/ARDUINO-Faden

Beitrag von Sir_Death »

Danke für den Link - ist schon gespeichert.
Mal schauen, wo ich das auf der Projektliste einordne.

Jedenfalls hat sich inzwischen gezeigt, dass der CH340-Treiber horrende langsam ist - da denkt man, das Programm wäre schon abgekackt.
Mit dem 16U2-Treiber geht es soviel schneller, dass keine Einschränkung merkbar ist - werd wohl die anderen beiden Maschinchen auch umrüsten...

Jedenfalls tut die Handsteuerung am Steckbrett schon - jetzt muss noch ein Gehäuse entstehen. Hmmmm..... mach ich das additiv oder subtraktiv? - immer diese schweren Entscheidungen ob Fräsen oder 3D-Drucken :lol:
Benutzeravatar
Rial
Beiträge: 2356
Registriert: Mi 23. Jul 2014, 19:20
Wohnort: Region Hannover

Re: Der AVR-/ARDUINO-Faden

Beitrag von Rial »

Hallo liebe Leute

Ich befasse mich grad mit dem Arduino Nano. (Danke Zabex) :D
Habe die letzten Tage schon viel gelesen,einiges an Hardware zum Spielen da
und auch noch einiges geordert,was hoffentlich in den nächsten Tagen kommt.

Ich habe auch schon ein konkretes Projekt im Kopf.
Es könnte auch ein UNO werden...
Die "einzelnen" Sketches" gibt es zum Großteil im Netz.
Die werde ich dann ausprobieren,wenn die restliche Hardware da ist.
Ich habe nur Sorgen,daß ich die nicht alle zusammengehäkelt kriege (für mein Projekt) :(

Gibt es jemanden auf dem Treffen 2018,der mir gegen Fleisch und Getränk helfen würde ?
xanakind
Beiträge: 12538
Registriert: So 11. Aug 2013, 21:55

Re: Der AVR-/ARDUINO-Faden

Beitrag von xanakind »

Ich habe seit langen mal wieder mal AVR Studio installiert, da ich eine Aufgabe für einen Tiny 45 habe.
Der kleine soll alle halbe Stunde einen Portpin auf kurz auf Low ziehen.
Im Prinzip also ein langsamer LED Blinker, dass habe ich auch schon hinbekommen und läuft :D

Nun verbaucht der Tiny etwa 1,3mA Strom. Ich habe ihn schon auf 1Mhz getaktet.
Das ist aber immernoch zuviel!
Welcher Schlafmodus macht hier Sinn?
Und wie baut man das am Sinnvollsten ein?
Der Tiny macht ansonsten nichts.
Da sind einfach nur 2 Delay Funktionen drin.
Matt
Beiträge: 6084
Registriert: So 24. Aug 2014, 21:22

Re: Der AVR-/ARDUINO-Faden

Beitrag von Matt »

probiert mal mit 32khz Quarz und entsprechende flags (Fuses)

dann sollte der wenigere Strom verbrauchen.

Noch wenigere Stromverbrauch kann man erzielen, wenn man ihm zum schlafen bringt und Timer & Überlauf-Interrupt aktiviert.
Bei Überlauf (= Interrupt) wacht AVR auf und zählt einmal hoch, und prüfen, ob der LED anlachen sollen und dann wieder sich zum Schlafen legen.

Allerdings erfordert das völlige andere Konzept als "delay_ms"-Funktion. Doch, da macht TINY was, denn der zählt sich runter (so funktioniert "delay_ms")

Noch habe ich damit nicht befasst und da bin ich sicher, dass es möglich ist.
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Fritzler »

Delay Funktion heißt Vollgas aufm Kern.
Zudem kann der T45 auch mit dem internen Watchdogtakt laufen -> 128kHz.
Ansonsten nimmste den 8Bit Timer1 (der kann bis 16k vorteilen).
Den Konfigurierste so, das er alle xmin nen IRQ wirft.
Mit einem IRQ kann man den AVR Kern aufwachen, den packste nämlich ind en Idle Mode.
https://www.nongnu.org/avr-libc/user-ma ... sleep.html

Ich würd ja noch mehr schreiben, aber ich hör meine Straßenbahn kommen :mrgreen:
Anse
Beiträge: 2278
Registriert: Mo 12. Aug 2013, 21:30
Wohnort: Bühl (Baden)

Re: Der AVR-/ARDUINO-Faden

Beitrag von Anse »

Interner Watchdog und alle x Sekunden aufwachen lassen. Dazwischen in den Powerdown. Wenn man noch sparsamer unterwegs sein will kann man sich noch das Kapitel 7.3 im DB anschauen.
Auf die Weise läuft bei mir schon ein Tiny13 über 5 Jahre auf einer CR2032. Musste sie nur tauschen weil man den Piepser nicht mehr richtig gehört hat.
Fischjoghurt
Beiträge: 271
Registriert: Di 13. Aug 2013, 16:19

Re: Der AVR-/ARDUINO-Faden

Beitrag von Fischjoghurt »

Hallo Leute

Nach langer langer Zeit habe ich wieder angefangen AVR sprich diesmal Arduino UNO zu programmieren. Früher mit WinAVR ohne Arduino aber da bin ich zu lange weg und deswegen programmieren ich den Arduino UNO mit Arduino Sketch. Es hat viele angenehme Funktionen wie das Arbeiten mit Strings was ich mit richtigem C richtig schrecklich finde. Was mich aber am meisten nervt ist, dass nicht alle Timer zur verfügung stehen. Der Timer0 ist für delay usw reserviert und diese Funktion brauche ich nicht.

Kann man den Timer 0 mit einem Trick in Arduino Sketch doch nutze?

Ich habe versucht mit:

ISR(TIMERO_OVF_vect)
{
digitalWrite(ledPin_13, digitalRead(ledPin_13) ^ 1);
}

bekomme ich die Fehlermeldung:

wiring.c.o (symbol from plugin): In function `__vector_16':
(.text+0x0): multiple definition of `__vector_16'
sketch\MyDyno_2.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Error compiling for board Arduino/Genuino Uno.


Mit :
ISR(TIMERO_OVF0_vect)
{
digitalWrite(ledPin_13, digitalRead(ledPin_13) ^ 1);
}

bekomme ich keine Fehlermeldung aber der Timer läuft nicht weil es wohl der falsche Vektor ist.
Was ist der Unterschied zwischen "TIMERO_OVF_vect" und "TIMERO_OVF0_vect" ?

Wer kann mir da helfen?

Und mit welcher IDE für Arduino abgesehen mit Sketch arbeitet Ihr?


Gruss
Benutzeravatar
Rial
Beiträge: 2356
Registriert: Mi 23. Jul 2014, 19:20
Wohnort: Region Hannover

Re: Der AVR-/ARDUINO-Faden

Beitrag von Rial »

Ich kriege ums Verrecken nicht den Arduino-Treiber für den USB-Serial
installiert !
Auf 2 verschiedenen Rechnern mit W7 Premium...
Die Installationsdatei von https://www.arduino.cc/en/Main/Software
läuft problemlos durch.Fragt auch brav,ob es die FTDI-Treiber und USB-Serial
installieren darf...

Wenn ich dann das Board anstecke "Treiber nicht gefunden/installiert".
Im Gerätemanager wird der USB-Serial ohne Treiber angezeigt.
Treiber aktuallisieren und den Ordner "Driver" von Arduino angeklickt :
Treiber konnte nicht gefunden werden...
Arne
Beiträge: 221
Registriert: So 11. Aug 2013, 19:12

Re: Der AVR-/ARDUINO-Faden

Beitrag von Arne »

Moin Rial,

ist denn auf dem Arduino ein FTDI drauf? Auf meinen Chinaclones sind CH340 drauf.

LG
Arne
Benutzeravatar
Rial
Beiträge: 2356
Registriert: Mi 23. Jul 2014, 19:20
Wohnort: Region Hannover

Re: Der AVR-/ARDUINO-Faden

Beitrag von Rial »

Ich habe 2 Nano-Clones und einen Uno-Clone ausprobiert.
Auf die beiden Nanos habe ich vor ein paar Wochen
auch schon das Beispiel "Blink" geschoben,welches auch funktioniert hat.

Aber auf einmal wollte es nicht mehr,bzw der Treiber war weg und lässt
sich nicht mehr installieren.
Benutzeravatar
Bastelbruder
Beiträge: 11481
Registriert: Mi 14. Aug 2013, 18:28

Re: Der AVR-/ARDUINO-Faden

Beitrag von Bastelbruder »

Vielleicht hilfts ...
Der Treiber - nicht bloß der Ordner - muß explizit ausgewählt werden und nur dann kommt auch die bekannte Sicherheitsabfrage. Dann wird der Treiber tatsächlich "aktualisiert". Ansonsten tut Windoofs bloß so als würde es updaten und wenn man nachschaut ist genau nix passiert.
Hält halt vielleicht bloß bis zur nächsten Gängelung.
Wird Zeit daß hier der hualp!-emoticon eingeführt wird.
Benutzeravatar
Rial
Beiträge: 2356
Registriert: Mi 23. Jul 2014, 19:20
Wohnort: Region Hannover

Re: Der AVR-/ARDUINO-Faden

Beitrag von Rial »

Eine direkte Datei kann ich nicht auswählen.Nur den Ordner.
Siehe Bild

Ich habe auch keine Ahnung,was ich vor ein paar Wochen anders
gemacht habe !?! :?
Dateianhänge
Arduino.jpg
Benutzeravatar
Rial
Beiträge: 2356
Registriert: Mi 23. Jul 2014, 19:20
Wohnort: Region Hannover

Re: Der AVR-/ARDUINO-Faden

Beitrag von Rial »

Hat vielleicht jemad einen (deutschen) Link zu funktionierenden Nanos ?
Darf auch ein Uno sein...
Ama Zon oder Bucht ?
Ich bin gerne bereit,mehr als 2 Euro pro Board zu bezahlen :roll:
Aber auch nur,wenn es auf Anhieb mit der offiziellen Software funktioniert !!!
Benutzeravatar
Weisskeinen
Beiträge: 3942
Registriert: Di 27. Aug 2013, 16:19

Re: Der AVR-/ARDUINO-Faden

Beitrag von Weisskeinen »

Einerseits könnte es helfen, mal nach der Vendor-ID und der Device-ID des USB-Serial-Wandlers zu suchen, um sicherzustellen, dass das wirklich ein FTDI-Teil ist. Wenn nicht (z.B. der CH340), passenden Treiber suchen und installieren. Wenn es ein FTDI-Chip sein soll, dann könnte es noch ein gefälschter sein. Neue FTDI-Treiber sollen das erkennen können und verweigern dann die Zusammenarbeit. Wie man das konkret löst, weiß ich aber jetzt auch nicht.
Einen Treiber kann man auch installieren, indem man die .inf-Datei im Explorer auswählt und installieren lässt (ööööhhhhmmmmm, Doppelklick oder Kontextmenü, weiß ich jetzt gerade nicht).
Benutzeravatar
Rial
Beiträge: 2356
Registriert: Mi 23. Jul 2014, 19:20
Wohnort: Region Hannover

Re: Der AVR-/ARDUINO-Faden

Beitrag von Rial »

Einerseits könnte es helfen, mal nach der Vendor-ID und der Device-ID des USB-Serial-Wandlers zu suchen, um sicherzustellen,
dass das wirklich ein FTDI-Teil ist. Wenn nicht (z.B. der CH340), passenden Treiber suchen und installieren.
Geilo ! Das war das Problem ! Ich danke dir vielmals !!! :)
Benutzeravatar
Weisskeinen
Beiträge: 3942
Registriert: Di 27. Aug 2013, 16:19

Re: Der AVR-/ARDUINO-Faden

Beitrag von Weisskeinen »

Jetzt habe ich auch mal ein Problem mit einem Arduino Pro Mini. Ich habe ein Thermometer gebaut, das einen DS18S20 ausliest (mit der OneWire- und der DallasTemperature-Library) und den Messwert auf einem OLED-Display ausgibt (mit der Adafruit_GFX- und der Adafruit_SSD1306-Library). Außerdem wird je nach Temperatur auch noch ein Servo angesteuert (Standard-Arduino-Servo-Library). Das funktioniert auch im Wesentlichen ordentlich, außer, dass immer wieder und nach völlig unterschiedlichen Zeiträumen die loop-Funktion stoppt. Irgendwas stürzt da irgendwie ab und ich weiß nicht, wie ich dem auf die Schliche kommen soll. Hat da jemand eine Idee?
An der Stromversorgung sollte es eigentlich nicht liegen, es sei denn, der Servo stört doch mal sporadisch zu stark...
Sir_Death
Beiträge: 3446
Registriert: Mo 11. Mai 2015, 22:36
Wohnort: südlich von Wien

Re: Der AVR-/ARDUINO-Faden

Beitrag von Sir_Death »

In welchen Zeitabständen stürzt das ab? - Hatte mal das selbe Problem mit einer windschiefen LCD-Library, in der Timer über das mitzählen von millisekunden gelöst waren - leider läuft auch irgendwann ein long int über...
Antworten