Der AVR-/ARDUINO-Faden
Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese
Re: Der AVR-/ARDUINO-Faden
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....
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....
- Später Gast
- Beiträge: 1697
- Registriert: Di 5. Apr 2016, 22:03
- Wohnort: Karlsruhe
- Kontaktdaten:
Re: Der AVR-/ARDUINO-Faden
andere SPI-Pins, Chip select? Auch im Code angepasst?
Re: Der AVR-/ARDUINO-Faden
Die SPI-Pins habe ich verglichen und auch mit dem Multimeter sicherheitshalber nochmal verlichen.Später Gast hat geschrieben: ↑Do 15. Apr 2021, 19:38 andere SPI-Pins, Chip select? Auch im Code angepasst?
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?
Re: Der AVR-/ARDUINO-Faden
Hast du in den Fuses das JTAG ausgeschaltet? Und SPI eingeschaltet?
Re: Der AVR-/ARDUINO-Faden
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.
Re: Der AVR-/ARDUINO-Faden
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.
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.
Re: Der AVR-/ARDUINO-Faden
Habe gerade einen Mega2560 v3 dienstlich hier liegen
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.
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.
Re: Der AVR-/ARDUINO-Faden
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
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
- Später Gast
- Beiträge: 1697
- Registriert: Di 5. Apr 2016, 22:03
- Wohnort: Karlsruhe
- Kontaktdaten:
Re: Der AVR-/ARDUINO-Faden
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.
Re: Der AVR-/ARDUINO-Faden
Das sagt aber nur, dass ich den Pin 53 nicht anderweitig verwenden darf.
Benutze ich ihn nicht, muss ich ihn freilassen.
Benutze ich ihn nicht, muss ich ihn freilassen.
Re: Der AVR-/ARDUINO-Faden
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.
Es funktioniert aber nicht ohne den SS beim Mega, es steht da nicht klar das man Pin 10 nehmen muss auch beim Mega.
Re: Der AVR-/ARDUINO-Faden
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.
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.
Re: Der AVR-/ARDUINO-Faden
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.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.
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.
Re: Der AVR-/ARDUINO-Faden
Die geschickteste Variante wäre IMHO zwei 74HC164 als Spalten und Zeilentreiber, sowie ein 74HC165 zum Lesen der Kontakte. Das ganze über SPI beschrieben.
Re: Der AVR-/ARDUINO-Faden
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.
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.
-
- Beiträge: 1506
- Registriert: Di 13. Aug 2013, 19:10
- Wohnort: Niedersachsen Süd-Ost
Re: Der AVR-/ARDUINO-Faden
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.
Re: Der AVR-/ARDUINO-Faden
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......
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);
}
Re: Der AVR-/ARDUINO-Faden
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
So hab ich dann irgendwann das mit dem Ethernet.init(53) gefunden und getestet:
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.
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
Code: Alles auswählen
class EthernetClass' has no member named 'ini'; did you mean 'init'
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.
- Fritzler
- Beiträge: 12599
- Registriert: So 11. Aug 2013, 19:42
- Wohnort: D:/Berlin/Adlershof/Technologiepark
- Kontaktdaten:
Re: Der AVR-/ARDUINO-Faden
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
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
-
- Beiträge: 1506
- Registriert: Di 13. Aug 2013, 19:10
- Wohnort: Niedersachsen Süd-Ost
Re: Der AVR-/ARDUINO-Faden
Freut mich, dass es geholfen hatHightech 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.
Mich würde noch interessieren, ob Du am Mega2560 beliebige andere PINs verwenden kannst, z.B. D10.
Re: Der AVR-/ARDUINO-Faden
Für andere Anwendungen meinst du, das die wieder frei sind?Profipruckel hat geschrieben: ↑So 18. Apr 2021, 17:14Freut mich, dass es geholfen hatHightech 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.
Mich würde noch interessieren, ob Du am Mega2560 beliebige andere PINs verwenden kannst, z.B. D10.
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.
Re: Der AVR-/ARDUINO-Faden
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?
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?
Re: Der AVR-/ARDUINO-Faden
Schau halt im Datenblatt nach wieviel Strom dein Schieberegister liefern kann.
Re: Der AVR-/ARDUINO-Faden
Ansonsten sowas wie.n ULN2003 oder so als Treiber
Re: Der AVR-/ARDUINO-Faden
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.
Da stehen X Angaben zu VCC und ESD Schutz, aber ich kann nicht so wirklich herauslesen, wie viel mA die Ausgänge können.
- Fritzler
- Beiträge: 12599
- Registriert: So 11. Aug 2013, 19:42
- Wohnort: D:/Berlin/Adlershof/Technologiepark
- Kontaktdaten:
Re: Der AVR-/ARDUINO-Faden
Aber google kannste bedienen um mal ein Bild aufzurufen was der IC kann?
Re: Der AVR-/ARDUINO-Faden
35mA pro Ausgang. aber alle Zusammen nicht mehr als 70mA. Du brauchst also eine Treiberstufe für die LEDs.
Re: Der AVR-/ARDUINO-Faden
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.
- Bastelbruder
- Beiträge: 11547
- Registriert: Mi 14. Aug 2013, 18:28
Re: Der AVR-/ARDUINO-Faden
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.
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.
Re: Der AVR-/ARDUINO-Faden
Wald und Wiesentransistor und Widerstand an das Schieberegister hängen?
Re: Der AVR-/ARDUINO-Faden
Das gebe ich mir mal morgen in aller Ruhe.
Heute kommt da nichts mehr bei rum.
Heute kommt da nichts mehr bei rum.
Re: Der AVR-/ARDUINO-Faden
Ich habe diesen Plan hervorgetan, denn offenbar hat das schon mal wer gebaut:
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.
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.
Re: Der AVR-/ARDUINO-Faden
https://en.wikipedia.org/wiki/ULN2003A
notfalls wüsste das dabla sowas.
notfalls wüsste das dabla sowas.
Re: Der AVR-/ARDUINO-Faden
das da an jedem anschluss zahlen stehen, hast du wohl noch nicht bemerkt.
- Weisskeinen
- Beiträge: 3948
- Registriert: Di 27. Aug 2013, 16:19
Re: Der AVR-/ARDUINO-Faden
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...
Übrigens gibt es auch Schieberegister aus dem Automotive-Bereich, die mehr Strom treiben können. Die stecken in Armaturenbrettern drin...
Re: Der AVR-/ARDUINO-Faden
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?
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?
Re: Der AVR-/ARDUINO-Faden
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:
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?
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);
}
}
}
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?
Re: Der AVR-/ARDUINO-Faden
Also ich sehe auf die Schnelle nichts. Das Einzige was sein könnte:Vergisst so ein Microcontroller seine Portwerte mit der Zeit? Oder was stimmt hier nicht?
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)
[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);
}
}
}
Re: Der AVR-/ARDUINO-Faden
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).
Re: Der AVR-/ARDUINO-Faden
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.
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.
Re: Der AVR-/ARDUINO-Faden
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?
Wie sieht der Pegel auf dem Pin aus? Kannst du den z.B. mit 470 Ohm gegen GND oder VCC verziehen?
Re: Der AVR-/ARDUINO-Faden
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...
Re: Der AVR-/ARDUINO-Faden
Setzt du die DDRx Register auch passend? (Blöde Frage, passiert aber gerne mal)
Re: Der AVR-/ARDUINO-Faden
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
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?
Jetzt bin ich verwirrt - ich bekomme den Fehler nicht mehr reproduziert
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?
Re: Der AVR-/ARDUINO-Faden
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?
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?
Re: Der AVR-/ARDUINO-Faden
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.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?
Ich versuche mal, das zu reproduzieren.
Re: Der AVR-/ARDUINO-Faden
Falls Du einen Watchdog-Timer aktiviert haben solltest und den nicht rechtzeitig gefüttert bekommst, würde es auch immer mal wieder Resets geben...
Re: Der AVR-/ARDUINO-Faden
MCUCR Auslesen und die Reset Source auslesen. Hat bei mir schon einige Mal Aufklärung gebracht über ominöse Resets.