Forum: Mikrocontroller und Digitale Elektronik Arduino Uno verus Nano Every


von Titze C. (titze_c)


Lesenswert?

Hallo die Runde, ich habe einen Sketch für einen Arduino Uno geschrieben 
(steuert LED in 2 bestimmten Frequenzen, umschaltbar über Switch Pin ), 
funktioniert beim Uno tadellos, beim Nano every nicht. WARUM? Bin 
Anfänger
LG aus Kärnten

von Kosename (Gast)


Lesenswert?

Titze C. schrieb:

> WARUM?

Gute Frage.

von essenistlecker (Gast)


Lesenswert?

Hallo,

so kann man dir nicht helfen.. paar mehr Details wären hilfreich ;)
Kannst du mal den Code Posten ?
bzw. den Schaltplan?

Funktioniert das Übertragen nicht ?
Richtiges Board ausgewählt ?
Nach jedem Befehl mal eine Serial Ausgabe gemacht wo der "hängen" bleibt 
?

Der Uno läuft auf 5V, der Nano Every auf 3.3V! irgendwo ein Pullup auf 
5V statt 3.3V liegen?

Gruß

von Titze C. (titze_c)


Lesenswert?

Also das ist der Sketch wie geschrieben beim uno funktioniert er, beim 
nano habe ich dauerleuchten.
// Source zum Demonstrator vom 30. Juni 2020

int switch_pin = 12;
int led_pinI = 10;
int led_pinH = 9;
int led_pinG = 8;
int led_pinF = 7;
int led_pinE = 6;
int led_pinD = 5;
int led_pinC = 4;
int led_pinB = 3;
int led_pinA = 2;
int blinkRate;

byte leds = 0;

void setup() {
  Serial.begin ( 115200);


  pinMode(switch_pin, INPUT);
  pinMode(led_pinA, OUTPUT);
  pinMode(led_pinB, OUTPUT);
  pinMode(led_pinC, OUTPUT);
  pinMode(led_pinD, OUTPUT);
  pinMode(led_pinE, OUTPUT);
  pinMode(led_pinF, OUTPUT);
  pinMode(led_pinG, OUTPUT);
  pinMode(led_pinH, OUTPUT);
  pinMode(led_pinI, OUTPUT);

}

void loop() {
  if (digitalRead(switch_pin) == HIGH) {
    blinkRate=12;
  }
  if (digitalRead(switch_pin) == LOW) {
    blinkRate=50;


  }

  digitalWrite(led_pinA, HIGH);
  digitalWrite(led_pinB, HIGH);
  digitalWrite(led_pinC, HIGH);
  digitalWrite(led_pinD, HIGH);
  digitalWrite(led_pinE, HIGH);
  digitalWrite(led_pinF, HIGH);
  digitalWrite(led_pinG, HIGH);
  digitalWrite(led_pinH, HIGH);
  digitalWrite(led_pinI, HIGH);
  delay(blinkRate) ;

  digitalWrite(led_pinA, LOW);
  digitalWrite(led_pinB, LOW);
  digitalWrite(led_pinC, LOW);
  digitalWrite(led_pinD, LOW);
  digitalWrite(led_pinE, LOW);
  digitalWrite(led_pinF, LOW);
  digitalWrite(led_pinG, LOW);
  digitalWrite(led_pinH, LOW);
  digitalWrite(led_pinI, LOW);
  delay(blinkRate);

  Serial.println(blinkRate);
}

von essenistlecker (Gast)


Lesenswert?

Hallo,

also hast du beim draufspielen schonmal keine Probleme, dass doch gut.

blinkRate ist bissel irreführend gewählt besser wäre Verzögerung.

blinkRate = 1 / (2*Verzögerung)

Wenn der switch_pin == HIGH ist hast du eine "blinkRate"(Verzögerung) = 
12
also 12ms x 2  -> 0,024s -> 1/0,024 ~ 42. also 42 mal pro Sekunde wäre 
deine blinkRate.. das kannst du auf ein Oszilloskop sehen aber für dein 
Auge ist das eine nicht ganz so stark leuchtende LED.

Wenn der switch_pin == LOW hast du immerhin ne Verzögerung von 50.
--> 1 / 2x0,05 = 10. -> blinkRate 10x die Sekunde.

Das kann das menschliche Auge noch unterscheiden.

Änder mal die Bezeichnung und nehme mal größere Werte zum Testen dann 
kannst du das auch mit dein Augen sehen ;)

Gruß

von essenistlecker (Gast)


Lesenswert?

gewöhn dich gleich mal an ohne delay zu programmeiren
1
bool status=0;
2
3
void loop() {
4
  if (digitalRead(switch_pin) == HIGH) {
5
    veroegerung=12;
6
  }
7
8
  if (digitalRead(switch_pin) == LOW) {
9
    veroegerung=50;
10
  }
11
12
  static long ntime = 0;
13
  
14
  if(millis-ntime >= veroegerung){
15
   status = status^1;
16
17
   digitalWrite(led_pinA, status);
18
   digitalWrite(led_pinB, status);
19
   digitalWrite(led_pinC, status);
20
   digitalWrite(led_pinD, status);
21
   digitalWrite(led_pinE, status);
22
   digitalWrite(led_pinF, status);
23
   digitalWrite(led_pinG, status);
24
   digitalWrite(led_pinH, status);
25
   digitalWrite(led_pinI, status);
26
   
27
   ntime = millis();
28
  }
29
30
}

von Langwelle (Gast)


Lesenswert?

gewöhn Dich mal ne vernünftige Rechtschreibung an ;-)

von sketch (Gast)


Lesenswert?

es gibt schöne sketche mit Ingrid Steeger

von Langwelle (Gast)


Lesenswert?

Aber Dein Code ist schön!!

was bedeutet status = status^1   ??

von Langwelle (Gast)


Lesenswert?

da interessieren mich aber

sketch schrieb:
> es gibt schöne sketche mit Ingrid Steeger

Da interessieren mich aber nicht die Sketche!;-)

von Titze C. (titze_c)


Lesenswert?

Danke erstmal @ essenistlecker, Problem gelöst, nach langem nachdenken 
ist mir eingefallen, dass ich dieses Problem ja schon einmal bei einem 
Uno gehabt habe und zwar zum Test nur 1 LED verwendet, dann spielt die 
Platine verrückt. Fährt man mit der Handfläche drüber, hört die LED auf 
zu blinken und leuchtet durch. Bei voller Belegung, also alle 9 LED, 
funzt es. Es handelt sich dabei um Infrarot LED, die als Therapie 
eingesetzt werden. zei Blinkfrequenzen 10 und 40 hertz.
Also danke an alle und ein schönes Wochenende
Christian

von Einer K. (Gast)


Lesenswert?

Nein!

von Veit D. (devil-elec)


Lesenswert?

Hallo,

@ TO:
Du arbeitest laut Sketch mit offenen Eingang, da muss das Teil 
zwangsweise verrückt spielen. Du benötigst entweder den internen Pullup 
oder einen Externen.

@ essenistlecker
Übrigens arbeitet ein Nano Every ganz normal mit 5V.
Und dein Code Bsp. ist leider auch zum scheitern verurteilt, weil ntime 
den falscher Datentyp. bool negieren geht einfacher mit '!'.
https://www.arduino.cc/reference/en/language/structure/boolean-operators/logicalnot/

Ich kann das nicht so stehen lassen. Ich denke das hier ist besser. 
Weitere  Leds können ergänzt werden. Den Taster kann auch auch noch in 
eine Funktion auslagern mit bool Rückgabewert.
1
const byte pinSwitch {12};
2
unsigned long refreshRate;
3
4
void setup (void)
5
{
6
  Serial.begin(250000);
7
  Serial.println("\nµC Reset ### ### ###");
8
  pinMode(pinSwitch, INPUT_PULLUP);
9
  pinMode(LED_BUILTIN, OUTPUT);
10
}
11
12
void loop (void)
13
{
14
  if (digitalRead(pinSwitch) ) {
15
    refreshRate = 50;
16
  }
17
  else {
18
    refreshRate = 500;
19
  }
20
  
21
  heartbeat(refreshRate);
22
23
  seriellerMonitor(1000, refreshRate);
24
}
25
26
27
// ****** Funktionen ******
28
void heartbeat (const unsigned long interval)                     
29
{
30
  static unsigned long lastMillis {0};
31
  const unsigned long ms {millis() };
32
  static bool state {false};
33
  
34
  if (ms - lastMillis >= interval) {
35
    lastMillis = ms;
36
    state = !state;
37
    digitalWrite(LED_BUILTIN, state);
38
  }
39
}
40
41
void seriellerMonitor (const unsigned long interval, const unsigned long &data)                     
42
{
43
  static unsigned long lastMillis {0};
44
  const unsigned long ms {millis()};
45
  
46
  if (ms - lastMillis >= interval) {
47
    lastMillis = ms;
48
    Serial.println(data);
49
  }  
50
}

von Manfred (Gast)


Lesenswert?

essenistlecker schrieb:
> Der Uno läuft auf 5V,
Ja.
> der Nano Every auf 3.3V!
Nein!

https://store.arduino.cc/arduino-nano-every:
An Improved Arduino Nano

If you used Arduino Nano in your projects in the past, the Nano Every is 
a pin-equivalent substitute. Your code will still work, and you will NOT 
need to re-wire those motors you planned in your original design.

von Titze C. (titze_c)


Lesenswert?

@ essenistlecker
Übrigens arbeitet ein Nano Every ganz normal mit 5V.
Und dein Code Bsp. ist leider auch zum scheitern verurteilt, weil ntime
den falscher Datentyp. bool negieren geht einfacher mit '!'.
https://www.arduino.cc/reference/en/language/structure/boolean-operators/logicalnot/

Der Code funktioniert einwandfrei(!), ist bei 20 Geräten in Verwendung, 
Uno und Mega.
Beim Every habe ich das Problem, dass ich die Platine angreifen muss 
damit das Programm läuft, lasse ich die Platine los DAUERLEUCHTEN. Kennt 
jemand dieses Phänomen?

von Udo (Gast)


Lesenswert?

Titze C. schrieb:
> Der Code funktioniert einwandfrei(!)

Offensichtlich nicht.

Veit D. schrieb:
> Du arbeitest laut Sketch mit offenen Eingang, da muss das Teil
> zwangsweise verrückt spielen. Du benötigst entweder den internen Pullup
> oder einen Externen.

Um das zu bestätigen, brauchen wir einen Schaltplan.
Also, her damit!

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Titze C. schrieb:
> Es handelt sich dabei um Infrarot LED, die als Therapie
> eingesetzt werden. zei Blinkfrequenzen 10 und 40 hertz.

Ich vermute eine Alu-Hut Anwendung ;-) Da wird es keine Schaltung geben.

von Titze C. (titze_c)


Lesenswert?

kann ein Foto schicken hilft das?

von Titze C. (titze_c)


Lesenswert?

nur noch eine Frage eines Unwissenden... Warum funktioniert es mit den 
anderen Boards???

von Udo (Gast)


Lesenswert?

Titze C. schrieb:
> kann ein Foto schicken hilft das?

Lass es uns probieren. Gerne.

Titze C. schrieb:
> nur noch eine Frage eines Unwissenden... Warum funktioniert es mit den
> anderen Boards???

Purer Zufall. Betreibe die Boards mal an einem anderen Ort, mit anderer 
Spannungsversorgung o.ä. und es wird bestimmt wieder "spinnen".

von Veit D. (devil-elec)


Lesenswert?

Hallo,

ohne Schaltplan kommen wir hier nicht weiter. Meine Logik sagt mir auch 
das es Zufall ist das es mit einem Uno/Mega funktioniert wenn es an 
einem Nano Every nicht funktioniert. Denn bei gleichen Code bedeutet das 
rückwärts betrachtet das keine externen Pullups/Pulldowns vorhanden 
sind. Es reicht schon ein Steckbrett und der Nano Every verhält sich mit 
offenen Eingängen anders. Das liegt aber nicht am Nano Every.

von Titze C. (titze_c)


Lesenswert?

@ Veit D danke für den Tipp, habe tatsächlich Versuchsweise über ein 
Steckbrett den Every probiert, werde heute im Original versuchen!

von Veit D. (devil-elec)


Lesenswert?

Hallo,

die Erkenntnis die du daraus mitnehmen musst ist, dass du keine offenen 
Eingänge haben darfst. Sprich keine undefinierten Pegel. Wenn du, was 
ich annehme, einen mechanischen Taster angeschlossen hast, dann 
benötigst du mittels externen Pullup/down oder internen Pullup immer 
einen definierten Spannungswert. Das kannst du auch auf dem Steckbrett 
ausprobieren.

von Titze C. (titze_c)


Lesenswert?

@Veit D. und jetzt wird kompliziert für mich. Das Teil wird mit einer 
Powerbank betrieben der die Stromversorgung übernimmt. um die 
Blinkfrequenzen zu ändern verwende ich einen Kippschalter, Switch pin

von Stefan F. (Gast)


Lesenswert?

Falls das eine Frage war, formuliere sie nochmal anders, zeige den 
Schaltplan und benenne die verwendeten Produkte. "Irgendein" 
Kippschalter ist zu ungenau.

von Einer K. (Gast)


Lesenswert?

Titze C. schrieb:
> @Veit D. und jetzt wird kompliziert für mich. Das Teil wird mit
> einer
> Powerbank betrieben der die Stromversorgung übernimmt. um die
> Blinkfrequenzen zu ändern verwende ich einen Kippschalter, Switch pin

Ich empfinde es als irrational, dass du mit keinem Piep auf die doch 
recht klare Pullup Ansage eingehst.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

so langsam weiß ich auch nicht was ich davon halten soll ...

von Andreas (Gast)


Lesenswert?

Veit D. schrieb:
> Hallo,
>
> so langsam weiß ich auch nicht was ich davon halten soll ...

Ich würde Abstand halten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.