Der AVR-/ARDUINO-Faden

Der chaotische Hauptfaden

Moderatoren: Finger, Sven, TDI, Heaterman, duese

Benutzeravatar
Cubicany
Beiträge: 2103
Registriert: Sa 15. Feb 2020, 17:48
Wohnort: Soest

Re: Der AVR-/ARDUINO-Faden

Beitrag von Cubicany » Fr 23. Apr 2021, 21:13

Finger hat geschrieben:
Fr 23. Apr 2021, 21:11
Ansonsten sowas wie.n ULN2003 oder so als Treiber
Also mir als totaler Anfänger bei Schieberegistern usw. sagt das auch nicht viel.

Online
Benutzeravatar
Fritzler
Beiträge: 9960
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Fritzler » Fr 23. Apr 2021, 21:13

Aber google kannste bedienen um mal ein Bild aufzurufen was der IC kann?

Benutzeravatar
barclay66
Beiträge: 736
Registriert: Di 13. Aug 2013, 04:12
Wohnort: im Speckgürtel Münchens

Re: Der AVR-/ARDUINO-Faden

Beitrag von barclay66 » Fr 23. Apr 2021, 21:16

35mA pro Ausgang. aber alle Zusammen nicht mehr als 70mA. Du brauchst also eine Treiberstufe für die LEDs.
Unbenannt.JPG

Benutzeravatar
Cubicany
Beiträge: 2103
Registriert: Sa 15. Feb 2020, 17:48
Wohnort: Soest

Re: Der AVR-/ARDUINO-Faden

Beitrag von Cubicany » Fr 23. Apr 2021, 21:17

Fritzler hat geschrieben:
Fr 23. Apr 2021, 21:13
Aber google kannste bedienen um mal ein Bild aufzurufen was der IC kann?
Habe gerade gesehen, dass das der iC ist, der auf dem Motortreiber von Arduino Lernset drauf sitzt.

Wie verbinde ich den denn am besten mit den vorhandenen Register?

Da gibt es offenbar verschiedene Arten.

Benutzeravatar
Bastelbruder
Beiträge: 8544
Registriert: Mi 14. Aug 2013, 18:28
Wohnort: drunt' am Neckar - km142,7

Re: Der AVR-/ARDUINO-Faden

Beitrag von Bastelbruder » Fr 23. Apr 2021, 21:18

Das steht in dem Datenblatt auch nicht drin.
Da muß man das übergeordnete Datenblatt der HC-Familie konsultieren.
Ich denke daß 20 mA realisierbar sind, das kommt aber auch auf die Versorgungsspannung :?: an.

MSG
Beiträge: 1095
Registriert: Fr 9. Nov 2018, 23:24
Wohnort: Nähe Dieburg

Re: Der AVR-/ARDUINO-Faden

Beitrag von MSG » Fr 23. Apr 2021, 21:19

Wald und Wiesentransistor und Widerstand an das Schieberegister hängen?

Benutzeravatar
Cubicany
Beiträge: 2103
Registriert: Sa 15. Feb 2020, 17:48
Wohnort: Soest

Re: Der AVR-/ARDUINO-Faden

Beitrag von Cubicany » Fr 23. Apr 2021, 21:27

Das gebe ich mir mal morgen in aller Ruhe.

Heute kommt da nichts mehr bei rum.

Benutzeravatar
Cubicany
Beiträge: 2103
Registriert: Sa 15. Feb 2020, 17:48
Wohnort: Soest

Re: Der AVR-/ARDUINO-Faden

Beitrag von Cubicany » Sa 24. Apr 2021, 10:32

Ich habe diesen Plan hervorgetan, denn offenbar hat das schon mal wer gebaut:
LED.JPG
Abgesehen von der Schnittstelle zum Controller sieht man ja gut, wie Register und ULN2003A verbunden sind.

Und das man eben den GND schaltet anstelle der Versorgung.

Ich tu mich nur etwas schwer, wie herum die ICs gedreht sind.

Die haben ja so eine Kerbe an einem Ende. Zeigt die nach oben oder unten?

Gibt es da Standards bei so Schaltplänen?

Als Betriebstechniker lernen wir das leider nicht so im Detail.

ch_ris
Beiträge: 1231
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris » Sa 24. Apr 2021, 10:35

https://en.wikipedia.org/wiki/ULN2003A
notfalls wüsste das dabla sowas.

Benutzeravatar
gafu
Beiträge: 4213
Registriert: Mi 14. Aug 2013, 20:56
Wohnort: nahe Jena
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von gafu » Sa 24. Apr 2021, 12:10

das da an jedem anschluss zahlen stehen, hast du wohl noch nicht bemerkt.

Benutzeravatar
Cubicany
Beiträge: 2103
Registriert: Sa 15. Feb 2020, 17:48
Wohnort: Soest

Re: Der AVR-/ARDUINO-Faden

Beitrag von Cubicany » Sa 24. Apr 2021, 13:13

gafu hat geschrieben:
Sa 24. Apr 2021, 12:10
das da an jedem anschluss zahlen stehen, hast du wohl noch nicht bemerkt.
Habe ich heute auch gesehen.

Gestern und heute früh hatte ich nur vom Schmierfon geschrieben.

Da sah man keine Zahlen dran stehen.

Benutzeravatar
Weisskeinen
Beiträge: 3583
Registriert: Di 27. Aug 2013, 16:19

Re: Der AVR-/ARDUINO-Faden

Beitrag von Weisskeinen » So 25. Apr 2021, 22:15

Das Schaltsymbol von ICs kann die Pins wild durcheinander gewürfelt haben, so wie's am besten passt. IC's (also die physischen Bauteile) im DIL-Gehäuse haben auf einer Schmalseite eine Kerbe, ist die oben, ist links davon Pin Nr. 1. Gezählt wird gegen den Uhrzeigersinn. Häufig ist Pin 1 auch noch mal mit einem Punkt gekennzeichnet, aber bei weitem nicht immer.
Übrigens gibt es auch Schieberegister aus dem Automotive-Bereich, die mehr Strom treiben können. Die stecken in Armaturenbrettern drin...

berferd
Beiträge: 719
Registriert: Mi 3. Apr 2019, 23:45

Re: Der AVR-/ARDUINO-Faden

Beitrag von berferd » So 2. Mai 2021, 16:25

Hat von euch jemand Erfahrung mit Programmierung von TPI-Programmierung von Attinys (zB den Attiny5) unter Linux?
Habe mal recherchiert und tendierte zum Diamex ALL AVR, allerdings scheint das unter Linux Probleme zu machen, offiziell wird nur Windows unterstützt. Avrdude kann es angeblich, allerdings nicht unter allen Linux-Versionen und nicht mit allen Diamex-Firmwareversionen, es gibt aber angeblich Workarounds unter Linux, die aber wieder nicht für alle funktionieren, etc... kurzum: Chaos!
Wer hat Empfehlungen?

Benutzeravatar
Torpert
Beiträge: 583
Registriert: Mo 12. Aug 2013, 22:40
Wohnort: Saarland
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Torpert » So 2. Mai 2021, 20:05

Ich habe einen Schrittmotor über einen Schrittmotortreiber (unbekannter Typ) am atmega2560 angeschlossen und will den immer laufen lassen, wenn ein Taster gedrückt ist. Mein Programm sieht so aus:

Code: Alles auswählen

#include <avr/io.h>
#include <util/delay.h>

// Stepper_E
#define	stepPin PA4            //Define Step pin
#define dirPin PA6             //Define Direction pin
#define enablePin PA2          //Define Enable pin
#define controlSwitch PE4      //Define Control Switch pin (D2)

int main(void)
{

    DDRA |= (1<<stepPin)|(1<<dirPin)|(1<<enablePin);     // Configure ports as output	 
    PORTA &= ~(1<<enablePin);                            // Enable driver
	PORTA &= ~(1<<dirPin);                //Make PORTA6 low to rotate motor in counter clockwise direction
	
	DDRE &= ~(1 << PE4);      // PE4 as input
	PORTE |= (1 << PE4);      // activate internal pullup
	
    while (1) 
    {
	    PORTA &= ~(1<<dirPin);                //Make PORTA6 low to rotate motor in counter clockwise direction

		if(!(PINE & (1<<PE4)) == 1) //If switch is pressed
           {
		      PORTA &= ~(1<<enablePin);
		      PORTA |=(1<<stepPin);
		      _delay_us(200);
		      PORTA &=~(1<<stepPin);
		      _delay_us(200);
		   }
		else
		   {
		      PORTA |=(1<<enablePin);
		   }
    }
}
Das Programm funktioniert. Was ich nicht verstehe, ist:

wenn ich die erste Zeile im while(1) weglasse [PORTA &= ~(1<<dirPin);], dann verhält das System sich nicht so, wie ich es erwarte. Wenn der Controller eine längere Zeit angeschaltet ist, vergisst er offenbar seine Drehrichtung und zappelt beim Betätigen des Tasters nur noch rum. Wenn ich das Richtungsregisters des Treibers permanent neu setze, funktioniert alles.

Vergisst so ein Microcontroller seine Portwerte mit der Zeit? Oder was stimmt hier nicht?

Anse
Beiträge: 1697
Registriert: Mo 12. Aug 2013, 21:30
Wohnort: Bühl

Re: Der AVR-/ARDUINO-Faden

Beitrag von Anse » So 2. Mai 2021, 22:30

Vergisst so ein Microcontroller seine Portwerte mit der Zeit? Oder was stimmt hier nicht?
Also ich sehe auf die Schnelle nichts. Das Einzige was sein könnte:

Code: Alles auswählen

#define	stepPin PA4            //Define Step pin
#define dirPin PA6             //Define Direction pin
#define enablePin PA2          //Define Enable pin
#define controlSwitch PE4      //Define Control Switch pin (D2)
Verwende mal statt den Konstanten PA6, PA2 usw. die "richtigen" Pin Nummern. Also 6, 2 usw. Ich weiß jetzt nicht auswendig, wie die Konstanten definiert sind.
[Hier stand Blödsinn]

Der geänderte Code:

Code: Alles auswählen

#include <avr/io.h>
#include <util/delay.h>

// Stepper_E
#define	stepPin 4            //Define Step pin
#define dirPin 6             //Define Direction pin
#define enablePin 2          //Define Enable pin
#define controlSwitch 4      //Define Control Switch pin (D2)

int main(void)
{

    DDRA |= (1<<stepPin)|(1<<dirPin)|(1<<enablePin);     // Configure ports as output	 
    PORTA &= ~(1<<enablePin);                            // Enable driver
	PORTA &= ~(1<<dirPin);                //Make PORTA6 low to rotate motor in counter clockwise direction
	
	DDRE &= ~(1 << 4);      // PE4 as input
	PORTE |= (1 << 4);      // activate internal pullup
	
    while (1) 
    {
	    PORTA &= ~(1<<dirPin);                //Make PORTA6 low to rotate motor in counter clockwise direction

		if(!(PINE & (1<<4)) == 1) //If switch is pressed
           {
		      PORTA &= ~(1<<enablePin);
		      PORTA |=(1<<stepPin);
		      _delay_us(200);
		      PORTA &=~(1<<stepPin);
		      _delay_us(200);
		   }
		else
		   {
		      PORTA |=(1<<enablePin);
		   }
    }
}

Benutzeravatar
sukram
Beiträge: 1158
Registriert: Sa 10. Mär 2018, 18:27
Wohnort: Leibzsch

Re: Der AVR-/ARDUINO-Faden

Beitrag von sukram » Mo 3. Mai 2021, 14:22

Aufpassen, control und step pin landen auf dem gleichen Ausgang, wenn dort die 4 steht. Arduino hat da so eine (ich finde ungeschickte) Übersetzung zwischen Platinenpin (fortlaufend nummeriert) und Controllerpin (in 8er Gruppern).

Benutzeravatar
Torpert
Beiträge: 583
Registriert: Mo 12. Aug 2013, 22:40
Wohnort: Saarland
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Torpert » Mo 3. Mai 2021, 16:20

Das stimmt schon so. Die 4 vom ControlSwitch wird an PORTE geschickt, die 4 vom StepPin an PORTA.

Ist auch nix mit Arduino. Ich hätte vielleicht gleich dazuschreiben sollen: Das ist ein nacktes Programm, compiliert per Kommandozeile unter avr-gcc. Ich binde keine Arduino Libraries ein und nutze auch keine Arduino IDE.

Das Programm funktioniert ja auch - egal, ob ich die Konstanten durch die Zahlenwerte ersetze oder nicht. Wenn da ein Fehler drin wäre, hätte es ja mit der Konstanten-Version schon nicht funktionieren dürfen.

Die ungeklärte Frage ist: Was passiert mit dem dirPin, wenn ich den nur beim Programmstart einmalig setze? Der geht offenbar irgendwann (Zeitraum etwa 1 Stunde, habe die Zeit aber nicht gemessen) verloren und der Schrittmotortreiber hat einen instabilen Wert. Als Notbehelf setze ich den Ausgang in der Schleife bei jedem Durchgang. Das ist garantiert ineffizient und ich würde gerne den Fehler verstehen, damit ich eine bessere Lösung einbauen kann.

Benutzeravatar
Finger
Administrator
Beiträge: 5052
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Finger » Mo 3. Mai 2021, 16:36

Kann es sein das der Pin hochohmig ist? Dann wäre das Ergebnis eher Zufall was da rauskommt. Ich hab das Datenblatt grad nicht vor Augen, ist da noch andere Peripherie dran?
Wie sieht der Pegel auf dem Pin aus? Kannst du den z.B. mit 470 Ohm gegen GND oder VCC verziehen?

sysconsol
Beiträge: 3123
Registriert: Fr 8. Jul 2016, 17:22

Re: Der AVR-/ARDUINO-Faden

Beitrag von sysconsol » Mo 3. Mai 2021, 17:03

Torpert hat geschrieben:
Mo 3. Mai 2021, 16:20
Die ungeklärte Frage ist: Was passiert mit dem dirPin, wenn ich den nur beim Programmstart einmalig setze?
Wenn der nicht wieder geändert wird, bleibt der so.
Das ist zumindest der Sinn dahinter.

Wenn du vermutest, dass es daran liegt, dann frage doch regelmäßig ab und gib den Zustand zum Debuggen aus.
Seriell oder via anderem Pin.

Sollte der Compiler da etwas wegoptimieren? :?

Ist der Pin am IC defekt?
Zumindest beim PIC sterben die immer schön portweise... :oops:

Benutzeravatar
sukram
Beiträge: 1158
Registriert: Sa 10. Mär 2018, 18:27
Wohnort: Leibzsch

Re: Der AVR-/ARDUINO-Faden

Beitrag von sukram » Mo 3. Mai 2021, 17:23

Setzt du die DDRx Register auch passend? (Blöde Frage, passiert aber gerne mal)

Benutzeravatar
Torpert
Beiträge: 583
Registriert: Mo 12. Aug 2013, 22:40
Wohnort: Saarland
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Torpert » Di 4. Mai 2021, 13:34

Ich habe von euren Ideen als erste die Überwachung des Pin implementiert (an den Hardware-Ausgang komme ich nur schlecht ran, das läuft auf einem ausrangierten Board vom 3D-Drucker. Da sind Mikrocontroller und Stepper driver direkt verdrahtet).

Jetzt bin ich verwirrt - ich bekomme den Fehler nicht mehr reproduziert :o

Einerseits gut, wenn alles funktioniert. Andererseits wüsste ich schon gerne, was falsch war :?

Der Pin ist Solo, hat keine weitere Funktion. Aber ins Datenblatt gucken ist nie verkehrt: Als ich dort nach dem Pin gesehen habe, bin ich über diesen Passus gestolpert:

The Port A pins are tri-stated when a reset condition becomes active, even if the clock is not running.

Was ist denn mit einer "reset condition" gemeint?

berferd
Beiträge: 719
Registriert: Mi 3. Apr 2019, 23:45

Re: Der AVR-/ARDUINO-Faden

Beitrag von berferd » Di 4. Mai 2021, 13:51

reset condition: Ich würde sagen: Reset-Pin low, oder Betriebsspannung zu niedrig (Brownout).
Prinzipiell könnte schon sein, dass Dein uC sich aufgrund EMV, Störungen in der Versorgung (Zuschalten großer Lasten?) o.ä. ab und zu verschluckt und in den Reset geht. Allerdings sollte er sich dann ja sofort wieder fangen nach dem Reboot?

Benutzeravatar
Torpert
Beiträge: 583
Registriert: Mo 12. Aug 2013, 22:40
Wohnort: Saarland
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Torpert » Di 4. Mai 2021, 14:09

berferd hat geschrieben:
Di 4. Mai 2021, 13:51
reset condition: Ich würde sagen: Reset-Pin low, oder Betriebsspannung zu niedrig (Brownout).
Prinzipiell könnte schon sein, dass Dein uC sich aufgrund EMV, Störungen in der Versorgung (Zuschalten großer Lasten?) o.ä. ab und zu verschluckt und in den Reset geht. Allerdings sollte er sich dann ja sofort wieder fangen nach dem Reboot?
So hätte ich auch getippt. Wobei es schon sein könnte, dass ich bei den ersten Probeläufen mit den Timings für den Stepper so weit daneben gelegen habe, dass der den Motortreiber überfordert hat. Wenn es möglich ist, dass das Board eine "reset condition" erzeugt, ohne mein Programm wieder von vorne zu starten, könnte das den Fehler erklären.

Ich versuche mal, das zu reproduzieren.

Benutzeravatar
barclay66
Beiträge: 736
Registriert: Di 13. Aug 2013, 04:12
Wohnort: im Speckgürtel Münchens

Re: Der AVR-/ARDUINO-Faden

Beitrag von barclay66 » Di 4. Mai 2021, 16:50

Falls Du einen Watchdog-Timer aktiviert haben solltest und den nicht rechtzeitig gefüttert bekommst, würde es auch immer mal wieder Resets geben...

Anse
Beiträge: 1697
Registriert: Mo 12. Aug 2013, 21:30
Wohnort: Bühl

Re: Der AVR-/ARDUINO-Faden

Beitrag von Anse » Di 4. Mai 2021, 19:28

MCUCR Auslesen und die Reset Source auslesen. Hat bei mir schon einige Mal Aufklärung gebracht über ominöse Resets.

Antworten