Der AVR-/ARDUINO-Faden

Der chaotische Hauptfaden

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

Benutzeravatar
Hightech
Beiträge: 11462
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Ich hänge gerade fest:
Ich hab ein W5100 Ethernet-Shield per SPI am Arduino nano. Da wird er erkannt.

Am Arduino Mega 2560 bekomme ich das nicht zum laufen, ich hab schon 3 Arduino Mega 2560 probiert.
Wo kann das denn hängen? Das shield wird schlicht nicht erkannt. Ich hab auch schon die Initialisierung verzögert....
Benutzeravatar
Später Gast
Beiträge: 1697
Registriert: Di 5. Apr 2016, 22:03
Wohnort: Karlsruhe
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Später Gast »

andere SPI-Pins, Chip select? Auch im Code angepasst?
Benutzeravatar
Hightech
Beiträge: 11462
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Später Gast hat geschrieben: Do 15. Apr 2021, 19:38 andere SPI-Pins, Chip select? Auch im Code angepasst?
Die SPI-Pins habe ich verglichen und auch mit dem Multimeter sicherheitshalber nochmal verlichen.
Chip-select habe ich auch geprüft.
Im Code muss ich das nicht anpassen, das macht der Arduino-Compiler, der weiss ja welche CPU ich da habe.
Oder sollte ich da in der SPI.h in der Fußpilzebene suchen?
Benutzeravatar
sukram
Beiträge: 3111
Registriert: Sa 10. Mär 2018, 18:27
Wohnort: Leibzsch

Re: Der AVR-/ARDUINO-Faden

Beitrag von sukram »

Hast du in den Fuses das JTAG ausgeschaltet? Und SPI eingeschaltet?
Benutzeravatar
Hightech
Beiträge: 11462
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

sukram hat geschrieben: Do 15. Apr 2021, 19:47 Hast du in den Fuses das JTAG ausgeschaltet? Und SPI eingeschaltet?
Ja, hab ich.
Aber ich habe Hinweise gefunden, das man wohl den SS Pin , (Pin53 bei Mega2560, Pin10 bei Nano) auf Output schalten soll.
Grundsätzlich bei SPI-Master Betrieb.
Teste ich mal.
Benutzeravatar
Hightech
Beiträge: 11462
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Man kann das nur wahnsinnig werden!!!!
Also überall steht am 2560 wird der SS Pin an Pin53 angeschlossen. Im Pinout des Arduino Mega2560 steht auch am Pin53 dran SS.
Aber das Ethernet Shield W5100 funktioniert nicht.
Nada.
Nun hab ich einfach mal den Port D10 Pin10 benutzt. Das ist PB04, nix SS.
Jetzt klappt das.
Es scheint die spi.h nicht auf den 2560 angepasst zu sein.

Man man man.
sysconsol
Beiträge: 4059
Registriert: Fr 8. Jul 2016, 17:22

Re: Der AVR-/ARDUINO-Faden

Beitrag von sysconsol »

Habe gerade einen Mega2560 v3 dienstlich hier liegen :roll:
Da soll eine SD-Karte dran.
Den SS-Pin kannst du hinlegen, wo du willst. Musst du in der Software aber auch zuordnen.
Spätestens wenn du mehrere SPI-Geräte hast, brauchst du ja auch mehrere SS-Pins.
Benutzeravatar
Hightech
Beiträge: 11462
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Frag mich mal wo ich den SS Pin definiere bei der Ethernet.h.
Die nimmt bei Nanos den Pin 10 und beim Mega eigentlich 53.
Nur warum klappt das nicht?
Pin 4 ist für die SD Card in der Sd Lib drin.
https://www.arduino.cc/en/reference/ethernet
Benutzeravatar
Später Gast
Beiträge: 1697
Registriert: Di 5. Apr 2016, 22:03
Wohnort: Karlsruhe
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Später Gast »

da stehts doch:
On both boards, pin 10 is used as SS. On the Mega, the hardware SS pin, 53, is not used to select the Ethernet controller chip, but it must be kept as an output or the SPI interface won't work.
sysconsol
Beiträge: 4059
Registriert: Fr 8. Jul 2016, 17:22

Re: Der AVR-/ARDUINO-Faden

Beitrag von sysconsol »

Das sagt aber nur, dass ich den Pin 53 nicht anderweitig verwenden darf.
Benutze ich ihn nicht, muss ich ihn freilassen.
Benutzeravatar
Hightech
Beiträge: 11462
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Ja, genau.
Es funktioniert aber nicht ohne den SS beim Mega, es steht da nicht klar das man Pin 10 nehmen muss auch beim Mega.
ch_ris
Beiträge: 3040
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

schachcomputer:
ich möchte nochmal Rat einholen bevor ich Rat erteile.
als sensor sind jetzt Reed kontakte gesetzt.
es braucht ja aber auch ein Feedback(1 led pro feld), da bietet sich ja ein MAX7221 an, gibt's ja schon fertig und günstig auf Platine.
jetzt war meine Idee, einen weiteren MAX7221 ebenso für die Reedkontakte zu benutzen,
und dann per reed Relais an der vcc des MAX die Stromaufnahme (schalter on/off) zu messen.
gut oder nicht gut?

edit. die könnte man ja kaskadieren und damit evtl. auf einen Nano zurückgreifen weil nur ein SPI nötig.
j.o.e
Beiträge: 550
Registriert: Fr 29. Nov 2019, 01:15

Re: Der AVR-/ARDUINO-Faden

Beitrag von j.o.e »

ch_ris hat geschrieben: Sa 17. Apr 2021, 08:33 schachcomputer:
ich möchte nochmal Rat einholen bevor ich Rat erteile.
als sensor sind jetzt Reed kontakte gesetzt.
es braucht ja aber auch ein Feedback(1 led pro feld), da bietet sich ja ein MAX7221 an, gibt's ja schon fertig und günstig auf Platine.
jetzt war meine Idee, einen weiteren MAX7221 ebenso für die Reedkontakte zu benutzen,
und dann per reed Relais an der vcc des MAX die Stromaufnahme (schalter on/off) zu messen.
gut oder nicht gut?

edit. die könnte man ja kaskadieren und damit evtl. auf einen Nano zurückgreifen weil nur ein SPI nötig.
Du willst die Reedkontakte auch elektrisch in einer Matrix anordnen? Bedenke dabei, dass bis zu 32 der Kontakte geschlossen sind. Muss man entkoppeln, z.B. über Dioden, sonst wird das nichts. Es gibt auch Hallgeber mit 2 o.C. Ausgängen. Die sind extra für sowas gemacht.

Dir ist schon klar, dass der MAX7221 die LED-Matrix mit ca. 800 Hz scant. Welche Aussage denkst du aus "der Strommessung an Vcc" zu gewinnen? Hast dir wenigstens mal ansatzweise die Signale am MAX angeschaut? Wenn man das SEHR verfeinert, könnte es hinhauen - könnte...

https://www-user.tu-chemnitz.de/~heha/M ... matrix.htm ist aber sicher zielführender.

Was man machen kann: Die Spaltentreiber gemeinsam für Anzeige und Kontakte verwenden. Für die LEDs brauchts dann einen Zeilentreiber, für die Reeds einen Zeilenleser. MAX7221 ist dann aber außen vor.

Edit: Vergleiche hierzu #6 im von mir genannten Link.
Benutzeravatar
sukram
Beiträge: 3111
Registriert: Sa 10. Mär 2018, 18:27
Wohnort: Leibzsch

Re: Der AVR-/ARDUINO-Faden

Beitrag von sukram »

Die geschickteste Variante wäre IMHO zwei 74HC164 als Spalten und Zeilentreiber, sowie ein 74HC165 zum Lesen der Kontakte. Das ganze über SPI beschrieben.
ch_ris
Beiträge: 3040
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

danke, guck ich mir morgen am pc mal genauer an.
joe meinst du angeschaut im dabla oder in echt? (weder das eine noch das andere.)
ich bin da auch nicht wirklich involviert, denke nur theoretisch drüber nach.
die, meine, naive? idee ist, jeweils nur einen Schalter software mäßig anschalten, die Stromaufnahme steigt über die schaltschwelle vom reedrelais=reed schalter ist betätigt.
Profipruckel
Beiträge: 1506
Registriert: Di 13. Aug 2013, 19:10
Wohnort: Niedersachsen Süd-Ost

Re: Der AVR-/ARDUINO-Faden

Beitrag von Profipruckel »

sysconsol hat geschrieben: Fr 16. Apr 2021, 13:07 Das sagt aber nur, dass ich den Pin 53 nicht anderweitig verwenden darf.
Benutze ich ihn nicht, muss ich ihn freilassen.
Du hast weiter oben den Link https://www.arduino.cc/en/reference/ethernet gepostet. Auch wirklich gelesen, die darin enthaltenen Details verfolgt?

https://www.arduino.cc/en/Reference/EthernetInit

void setup() {
Ethernet.init(53); // use pin 53 for Ethernet CS
Ethernet.begin(mac, ip);
}


Das gilt auch für die SD.h, die ich allerdings nur am Nano benutze:
const int chipSelect = 10;
SD.begin(chipSelect);


Ich weiß nicht genau, wer mir beim Nano in die Suppe spuckt, sobald ich die SPI.h eingebunden habe, kann ich den D10 nicht mehr anderweitig verwenden. Ist eigentlich egal, dann nehme ich den halt als CS - aber das klingt ähnlich wie Dein 53 am 2560.
Benutzeravatar
Hightech
Beiträge: 11462
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Ich könnte schwören, das ich das Ethernet.init(53);
getestet habe und dann eine Compilerwarung bekommen habe mit irgendwas mit
"Nenene das geth nicht!, Pfui!"
Nun frisst der Compiler das, der Verräter.
Ich teste den Sketch morgen mal mit Ethernet.init(53):

Vielleicht hab ich auch Ethernet.ini(53); versucht......
Profipruckel hat geschrieben: Sa 17. Apr 2021, 19:47
Du hast weiter oben den Link https://www.arduino.cc/en/reference/ethernet gepostet. Auch wirklich gelesen, die darin enthaltenen Details verfolgt?

https://www.arduino.cc/en/Reference/EthernetInit

void setup() {
Ethernet.init(53); // use pin 53 for Ethernet CS
Ethernet.begin(mac, ip);
}
Benutzeravatar
Hightech
Beiträge: 11462
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Ja, jetzt geht der.

Also es scheint wie folgt:
Nach langem Suchen und Fluchen hatte ich den Passus mit dem Ethernet.init(53) auch gefunden und mich gefreut, das ich es wahrscheinlich gefunden habe und das Problem aus der Welt ist.
Vorher hatte ich auch Ethernet.begin(mac, ip, 53) versucht.
Da bekam ich das

Code: Alles auswählen

ArduNodeMqtt2-DS18B20:182:29: error: call of overloaded 'begin(byte [6], IPAddress&, int)' is ambiguous
So hab ich dann irgendwann das mit dem Ethernet.init(53) gefunden und getestet:

Code: Alles auswählen

class EthernetClass' has no member named 'ini'; did you mean 'init'
Ich hab das schlicht nicht verstanden was DA STEHT
did you mean 'init

In der Regel kommt vom Compiler immer gemecker, das man wieder mal ein char* nicht mit einem int verrechnen kann, oder so Zeug.
Benutzeravatar
Fritzler
Beiträge: 12599
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Fritzler »

Der GCC bekommt immer bessere Fehlermeldungen.
Die Funktionsvorschläge bei vertippern sind schon nett.

Der GCC haut dir auch Warnings um die Ohren wenn er meint, dass der Buffer beim snprintf nicht groß genug sei für den übergebenen Formatstring ;)
Profipruckel
Beiträge: 1506
Registriert: Di 13. Aug 2013, 19:10
Wohnort: Niedersachsen Süd-Ost

Re: Der AVR-/ARDUINO-Faden

Beitrag von Profipruckel »

Hightech hat geschrieben: So 18. Apr 2021, 08:55 Ja, jetzt geht der.

Also es scheint wie folgt:
Nach langem Suchen und Fluchen hatte ich den Passus mit dem Ethernet.init(53) auch gefunden und mich gefreut, das ich es wahrscheinlich gefunden habe und das Problem aus der Welt ist.
Vorher hatte ich auch Ethernet.begin(mac, ip, 53) versucht.
Freut mich, dass es geholfen hat :D

Mich würde noch interessieren, ob Du am Mega2560 beliebige andere PINs verwenden kannst, z.B. D10.
Benutzeravatar
Hightech
Beiträge: 11462
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Profipruckel hat geschrieben: So 18. Apr 2021, 17:14
Hightech hat geschrieben: So 18. Apr 2021, 08:55 Ja, jetzt geht der.

Also es scheint wie folgt:
Nach langem Suchen und Fluchen hatte ich den Passus mit dem Ethernet.init(53) auch gefunden und mich gefreut, das ich es wahrscheinlich gefunden habe und das Problem aus der Welt ist.
Vorher hatte ich auch Ethernet.begin(mac, ip, 53) versucht.
Freut mich, dass es geholfen hat :D

Mich würde noch interessieren, ob Du am Mega2560 beliebige andere PINs verwenden kannst, z.B. D10.
Für andere Anwendungen meinst du, das die wieder frei sind?
Den D10 hatte ich ja als Notlösung dran am Ethernetshield.

Was wohl nicht geht, ist zB. D9 oder andere Pins zu nutzen UND Pin53 für Input. Dann schaltet der wohl hart auf SPI-Slave.
Benutzeravatar
Cubicany
Beiträge: 3543
Registriert: Sa 15. Feb 2020, 17:48
Wohnort: Soest

Re: Der AVR-/ARDUINO-Faden

Beitrag von Cubicany »

Ich hatte vor, mit einem Nano und Schieberegister 74HC595 eine Segmentanzeige zum leuchten zu bringen.

Der Haken: Die hat 3 LEDs pro Segment (selbst gebaut) Also so etwa 60 Ma pro Ausgang vom Register.

Kann man das wie eine normale Anzeige anschließen oder ist der Strom zu viel?

Wenn der Strom das Problem ist, wie könnte ich es lösen?
Tobi
Beiträge: 822
Registriert: So 11. Aug 2013, 16:52
Wohnort: Eschweiler

Re: Der AVR-/ARDUINO-Faden

Beitrag von Tobi »

Schau halt im Datenblatt nach wieviel Strom dein Schieberegister liefern kann.
Benutzeravatar
Finger
Administrator
Beiträge: 7458
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Finger »

Ansonsten sowas wie.n ULN2003 oder so als Treiber
Benutzeravatar
Cubicany
Beiträge: 3543
Registriert: Sa 15. Feb 2020, 17:48
Wohnort: Soest

Re: Der AVR-/ARDUINO-Faden

Beitrag von Cubicany »

Also ich komme mit dem Datenblatt irgendwie nicht zurecht.

Da stehen X Angaben zu VCC und ESD Schutz, aber ich kann nicht so wirklich herauslesen, wie viel mA die Ausgänge können.
Benutzeravatar
Cubicany
Beiträge: 3543
Registriert: Sa 15. Feb 2020, 17:48
Wohnort: Soest

Re: Der AVR-/ARDUINO-Faden

Beitrag von Cubicany »

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.
Benutzeravatar
Fritzler
Beiträge: 12599
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Fritzler »

Aber google kannste bedienen um mal ein Bild aufzurufen was der IC kann?
Benutzeravatar
barclay66
Beiträge: 1077
Registriert: Di 13. Aug 2013, 04:12
Wohnort: im Speckgürtel Münchens

Re: Der AVR-/ARDUINO-Faden

Beitrag von barclay66 »

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: 3543
Registriert: Sa 15. Feb 2020, 17:48
Wohnort: Soest

Re: Der AVR-/ARDUINO-Faden

Beitrag von Cubicany »

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: 11547
Registriert: Mi 14. Aug 2013, 18:28

Re: Der AVR-/ARDUINO-Faden

Beitrag von Bastelbruder »

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: 2195
Registriert: Fr 9. Nov 2018, 23:24
Wohnort: Nähe Dieburg

Re: Der AVR-/ARDUINO-Faden

Beitrag von MSG »

Wald und Wiesentransistor und Widerstand an das Schieberegister hängen?
Benutzeravatar
Cubicany
Beiträge: 3543
Registriert: Sa 15. Feb 2020, 17:48
Wohnort: Soest

Re: Der AVR-/ARDUINO-Faden

Beitrag von Cubicany »

Das gebe ich mir mal morgen in aller Ruhe.

Heute kommt da nichts mehr bei rum.
Benutzeravatar
Cubicany
Beiträge: 3543
Registriert: Sa 15. Feb 2020, 17:48
Wohnort: Soest

Re: Der AVR-/ARDUINO-Faden

Beitrag von Cubicany »

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: 3040
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

https://en.wikipedia.org/wiki/ULN2003A
notfalls wüsste das dabla sowas.
Benutzeravatar
gafu
Beiträge: 6388
Registriert: Mi 14. Aug 2013, 20:56
Wohnort: nahe Jena
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von gafu »

das da an jedem anschluss zahlen stehen, hast du wohl noch nicht bemerkt.
Benutzeravatar
Cubicany
Beiträge: 3543
Registriert: Sa 15. Feb 2020, 17:48
Wohnort: Soest

Re: Der AVR-/ARDUINO-Faden

Beitrag von Cubicany »

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: 3948
Registriert: Di 27. Aug 2013, 16:19

Re: Der AVR-/ARDUINO-Faden

Beitrag von Weisskeinen »

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: 1336
Registriert: Mi 3. Apr 2019, 23:45

Re: Der AVR-/ARDUINO-Faden

Beitrag von berferd »

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: 1432
Registriert: Mo 12. Aug 2013, 22:40
Wohnort: Saarland
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Torpert »

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: 2304
Registriert: Mo 12. Aug 2013, 21:30
Wohnort: Bühl (Baden)

Re: Der AVR-/ARDUINO-Faden

Beitrag von Anse »

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: 3111
Registriert: Sa 10. Mär 2018, 18:27
Wohnort: Leibzsch

Re: Der AVR-/ARDUINO-Faden

Beitrag von sukram »

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: 1432
Registriert: Mo 12. Aug 2013, 22:40
Wohnort: Saarland
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Torpert »

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: 7458
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Finger »

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: 4059
Registriert: Fr 8. Jul 2016, 17:22

Re: Der AVR-/ARDUINO-Faden

Beitrag von sysconsol »

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: 3111
Registriert: Sa 10. Mär 2018, 18:27
Wohnort: Leibzsch

Re: Der AVR-/ARDUINO-Faden

Beitrag von sukram »

Setzt du die DDRx Register auch passend? (Blöde Frage, passiert aber gerne mal)
Benutzeravatar
Torpert
Beiträge: 1432
Registriert: Mo 12. Aug 2013, 22:40
Wohnort: Saarland
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Torpert »

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: 1336
Registriert: Mi 3. Apr 2019, 23:45

Re: Der AVR-/ARDUINO-Faden

Beitrag von berferd »

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: 1432
Registriert: Mo 12. Aug 2013, 22:40
Wohnort: Saarland
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Torpert »

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: 1077
Registriert: Di 13. Aug 2013, 04:12
Wohnort: im Speckgürtel Münchens

Re: Der AVR-/ARDUINO-Faden

Beitrag von barclay66 »

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: 2304
Registriert: Mo 12. Aug 2013, 21:30
Wohnort: Bühl (Baden)

Re: Der AVR-/ARDUINO-Faden

Beitrag von Anse »

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