Der AVR-/ARDUINO-Faden

Der chaotische Hauptfaden

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

xanakind
Beiträge: 12538
Registriert: So 11. Aug 2013, 21:55

Re: Der AVR-/ARDUINO-Faden

Beitrag von xanakind »

Danke für die Info, also habe ich mir den mit dem FIrmwareupdate wohl gehimmelt :roll:
Ich werde später aber noch das ST Link utility testen, vielleicht geht es damit ja.
xanakind
Beiträge: 12538
Registriert: So 11. Aug 2013, 21:55

Re: Der AVR-/ARDUINO-Faden

Beitrag von xanakind »

Fritzler hat geschrieben: Mo 25. Jul 2022, 07:53 Falls das der Fall sein sollte kann es Xana ja zum Treffen mitbringen.
Dann komm ich mitm Programmer.
(Aber vorher Bescheid sagen, sonst nehm ich den nicht mit!)

Ein Adapter von ARM 20 pol JTAG (2,54mm) auf DPS5005 musste aber selber mitbringen:
Bild
Benötigt werden:
vtref an 3,3V
SWDIO, SWDCLK, GND, reset
Verstehe ich das richtig:
Du kannst mit deinem Programmer die Firmware auf meinem China-Clone neu aufspielen?
Die 3 Drähte da dranfummeln sollte ich hinbekommen :lol:
Ich melde mich aber dann nochmals
xanakind
Beiträge: 12538
Registriert: So 11. Aug 2013, 21:55

Re: Der AVR-/ARDUINO-Faden

Beitrag von xanakind »

Ha! mit dem alten ST Link Utility hat es auf anhieb (!) funktioniert:
1.jpg
Danke für die Hilfe! :)
So, jetzt noch die restlichen 6 Stück umprogrammieren.....
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 »

Oha, hochkant für mehr Packungsdichte oder was? :lol:

Wenn der alte ST Link geht, kannste den neuen damit ja nun auch coden.
Musst aber den Hardware Reset rausführen.
xanakind
Beiträge: 12538
Registriert: So 11. Aug 2013, 21:55

Re: Der AVR-/ARDUINO-Faden

Beitrag von xanakind »

Hat völlig problemlos geklappt:
1.jpg
Die Firmware ist nun auf allen aufgespielt:
2.jpg
:D
jodurino
Beiträge: 2088
Registriert: So 17. Nov 2013, 20:43

Re: Der AVR-/ARDUINO-Faden

Beitrag von jodurino »

Moin

habe am Arduino UNO diese 5mm LEDs angeschlossen:
https://www.conrad.de/de/p/thomsen-led- ... 75784.html
mit SK6812 und auch nur 4 Stück.

die Idee kommt von hier:
https://funduino.de/nr-17-ws2812-neopixel

Code: Alles auswählen


#include <Adafruit_NeoPixel.h>
// die folgenden 3 Zeilen auszukommentieren bringt auch nix
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
//

#define PIN        6 // Pin für die Datenleitung ob 9 oder 6 bedes probiert
#define NUMPIXELS 4 // Anzahl der WS2812 LEDs oder der NEOPIXEL

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() 
{
  pixels.begin(); // Initialisierung der LEDs
}

void loop() {
	 pixels.clear(); // Deaktivieren aller LEDs
    pixels.setPixelColor(3, pixels.Color(0, 150, 0));
    pixels.show();   // Senden der aktualisierten Daten an die WS2812 LEDs
    delay(500);
    pixels.clear(); // Deaktivieren aller LEDs
    pixels.setPixelColor(3, pixels.Color(150, 0, 0));
    pixels.show();   // Senden der aktualisierten Daten an die WS2812 LEDs
    delay(500);
    pixels.clear(); // Deaktivieren aller LEDs
    pixels.setPixelColor(3, pixels.Color(0, 0, 150));
    pixels.show();   // Senden der aktualisierten Daten an die WS2812 LEDs
    delay(500);
    pixels.clear(); // Deaktivieren aller LEDs
	pixels.setPixelColor(3, pixels.Color(0, 150, 150));
    pixels.show();   // Senden der aktualisierten Daten an die WS2812 LEDs
    delay(500);
}
eigentlich müsste eine LED die Farbe wechseln, macht es aber nicht, es wechseln 2 oder 3 verschiedene die Farben.
DIN und DO sind bei allen richtig belegt, habe mal zum Test an dem ersten DIN einen 470 Ohm Widerstand eingebaut hat es aber auch nicht gebracht

Wenn ich die erste LED Anspreche geht es.
Achso alle Verbindungen an den LEDs sind gelötet aso nix Steckbrett

Muss ich bei den SK6812 noch einen extra Tanz aufführen?

EDIT sagt: Arduino Mega zum Probieren genommen, gleicher Effekt

cu
jodurino
Benutzeravatar
Später Gast
Beiträge: 1680
Registriert: Di 5. Apr 2016, 22:03
Wohnort: Karlsruhe
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Später Gast »

Du hast RGBW LED, deine Befehle hauen aber nur RGB Daten raus, deine Anleitung spricht von "Im Setup wir der Befehl „NEO_GRB“ gegen „NEO_GRBW“ ausgetauscht." und " In dem Befehl wird eine vierte Zahlenposition ergänzt. pixels.setPixelColor(x,pixels.Color(255,0,0,0))=Rot"

probier das mal aus
IPv6
Beiträge: 2166
Registriert: Fr 17. Mär 2017, 22:05

Re: Der AVR-/ARDUINO-Faden

Beitrag von IPv6 »

Wie kommst du darauf, dass das RGBW LEDs sind?
Sowohl die Artikelbeschreibung als auch das Datenblatt von diesen 5 mm LEDs spricht nur von RGB.

Die Neopixel sind recht empfindlich was die Spannungsversorgung angeht, die typischen LED-Streifen oder kleinen Platinchen haben immer einen 100 nF Kondensator direkt an der LED über die Spannungsversorgung. Pack doch auch mal an deine LEDs je einen 100 nF Kondensator, vielleicht ändert das was?
Benutzeravatar
Später Gast
Beiträge: 1680
Registriert: Di 5. Apr 2016, 22:03
Wohnort: Karlsruhe
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Später Gast »

IPv6 hat geschrieben: Fr 5. Aug 2022, 23:49 Wie kommst du darauf, dass das RGBW LEDs sind?
Hirnfurz :oops: Hatte bisher nur die WS2812 und die haben nur RGB und mal nach den SK6812 gegoogelt, und da halt RGBW Suchergebnisse gefunden. Beim verlinkten Angebot übersehen, dass die nur RGB sind. Kann ja aber immernoch sein, dass der Chip ein Oktett mehr haben will, selbst wenn er W nicht ausgeben kann oder halt nichts angeschlossen ist.
Jannyboy
Beiträge: 1406
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der AVR-/ARDUINO-Faden

Beitrag von Jannyboy »

Später Gast hat geschrieben: Sa 6. Aug 2022, 00:10 Hirnfurz :oops: Hatte bisher nur die WS2812 und die haben nur RGB und mal nach den SK6812 gegoogelt, und da halt RGBW Suchergebnisse gefunden. Beim verlinkten Angebot übersehen, dass die nur RGB sind.
Es gibt die SK6812 in 3 Versionen.
Die RGB und WWA brauchen 3 Byte pro LED und die RGBW brauchen 4 Byte pro LED.

Zu dem gibt es Versionen wo RGBW Controller verbaut sind die aber nur RGB LED-Dies bestückt haben. Das ist meistens diese ultrabillig Bänder.

Zu dem gibt es die noch in einer WWA Version.
Also amber, warm sunlight and blue white.

Ich beziehe meine LEDs hier her:
https://www.opscoled.com/en/

Grüße Jan
frickelfred56
Beiträge: 230
Registriert: Mo 16. Feb 2015, 13:50

Re: Der AVR-/ARDUINO-Faden

Beitrag von frickelfred56 »

Moin
Ich brauch mal eureb rat oder Hilfe.
ich versuche unter der Arduinoumgebug auf einen Raspi4 einen Attiny85 zu programieren.
Ich habe dazu einen Nano als ISP geflasht. und den Attiny85 nach diesem Link
https://create.arduino.cc/projecthub/ar ... uno-afb829
angeschlossen.

das klappt nicht, und es kommt immer die Meldung

Code: Alles auswählen

Arduino: 1.8.19 (Linux), Board: "ATtiny25/45/85, ATtiny85, Internal 1 MHz"

Der Sketch verwendet 2458 Bytes (30%) des Programmspeicherplatzes. Das Maximum sind 8192 Bytes.
Globale Variablen verwenden 178 Bytes (34%) des dynamischen Speichers, 334 Bytes für lokale Variablen verbleiben. Das Maximum sind 512 Bytes.
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x14

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x01
avrdude: stk500_initialize(): (a) protocol error, expect=0x14, resp=0x10
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

avrdude: stk500_disable(): unknown response=0x12
Der ausgewählte serielle Port avrdude: stk500_disable(): unknown response=0x12
 ist nicht vorhanden oder das Board ist nicht angeschlossen


Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

leider finde ich im Netz keine brauchbaren hinweise bis auf
das hier https://github.com/arduino/Arduino/issues/5520
die da angesprochene Änderung ist aber mittlerweile so eingepflgt.
Gibt es da noch weitere hinweise oder Lösungen für mein Problem?

Frickelfred
bastelheini
Beiträge: 1663
Registriert: So 11. Aug 2013, 13:55

Re: Der AVR-/ARDUINO-Faden

Beitrag von bastelheini »

Brauche ebenfalls Hilfe:

hab mir einige attiny85 digispark clones besorgt. Im Forum steht ja das der Original Bootloader nicht so pralle ist. Daher soll ein anderer drauf. Folgender klingt gut: https://www.mikrocontroller.net/article ... _Dannegger
Ich arbeite unter Windows, mit make und dergleichen hab ich bis jetz nix am Hut gehabt. Anleitung befolgt mit dem aktuellen Atmel (Microchip) Studio. Geht nicht so recht.

Daher https://www.mikrocontroller.net/article ... Toolchain) befolgt, auch die Beispiele runtergeladen (https://www.mikrocontroller.net/topic/1 ... le#3718967).

Die Voraussetzungen habe ich erfüllt. Zusätzlich noch das obendrüber erwähnt avr-gcc installiert. Bei der cygwin Installation das Paket make gewählt und installiert.

Wenn ich jetzt in der Windows Eingabeaufforderung zu dem Ordner navigiere bekomme ich:

Code: Alles auswählen

C:\temp\fastboot-2.9>make clean
Makefile:125: atmel_def.mak: No such file or directory
./_conv.awk atmel/m32def.inc | gawk '/PAGESIZE|SIGNATURE_|SRAM_|FLASHEND|BOOT/' > atmel_def.h
Der Befehl "." ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Makefile:171: recipe for target 'atmel_def.h' failed
make: *** [atmel_def.h] Error 255
In den Threads zum oben genannten Wiki Artikel steht, dass die fehlende "atmel_def.mak" wohl normal ist und ignoriert werden kann, da sie wohl erst erzeugt wird. Mit dem darauffolgenden Fehler kann ich aber nichts anfangen. Wer kann mir da über die Straße helfen? Ich weiß auch nicht so recht welches make nun genommen wird. Hat Windows 10 mittlerweile was eingebautes, oder nimmt es das cygwin Dings? Oder das aus avr-gcc? Bei der gezielten Auswahl kommt

Code: Alles auswählen

C:\>C:\SysGCC\avr\bin\make.exe
make: *** No targets specified and no makefile found.  Stop.

C:\>C:\SysGCC\avr\bin\make.exe C:\temp\fastboot-2.9\makefile-m8
make: Nothing to be done for `C:\temp\fastboot-2.9\makefile-m8'.
Hilft mir auch nicht wirklich weiter :(

Ich wollte den Bootloader halt nehmen da er für verschiedene AVR konfiguriert werden kann, die Pins bequem festgelegt werden können und auch via onewire Zugriff möglich ist.
ch_ris
Beiträge: 3029
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

meine Meinung:
ob der Bootloader taugt oder nicht, kann ich nicht beurteilen...
ist das Hauptproblem der Soft USB (Mist).
Ich jedenfalls werde keinen Bootloader mehr benutzen beim Tiny.
jodurino
Beiträge: 2088
Registriert: So 17. Nov 2013, 20:43

Re: Der AVR-/ARDUINO-Faden

Beitrag von jodurino »

IPv6 hat geschrieben: Fr 5. Aug 2022, 23:49 Wie kommst du darauf, dass das RGBW LEDs sind?
Sowohl die Artikelbeschreibung als auch das Datenblatt von diesen 5 mm LEDs spricht nur von RGB.

Die Neopixel sind recht empfindlich was die Spannungsversorgung angeht, die typischen LED-Streifen oder kleinen Platinchen haben immer einen 100 nF Kondensator direkt an der LED über die Spannungsversorgung. Pack doch auch mal an deine LEDs je einen 100 nF Kondensator, vielleicht ändert das was?
JA genau das war es denke ich, die erste Verdrahtung ist ja über jeden Zweifel erhaben (hope) nur das die Kondensatoren fehlten.

Jetzt habe ich die 5V extra versorgt und nicht mehr vom ArduinoPin genommen
jede LED hat einen 100nf Kondensator und ein 1000µF Elko ist noch mal parallel zu den LEDs
die Datenleitung ist kurz und ich habe ein 470 Ohm Widerstand an D_In der ersten LED

EDIT sagt: guck mal Foto:
Bild
Falls sich einer doch noch wundern sollte, daß rot/weiße Kabel ist 0,75 und bedeutet hier im Gerät +5V. Denn rot ist eigentlich für +12V in diesem Gerät gedacht, aber die 0,75er Leitung ist zu unhandlich am LEDPin


Logisch sind sie G_R_B und nicht R_G_B was ich erst immer noch im Kopf haben muss, aber das kann man ja beachten.

Vielen Dank für die Tipps

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

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

Kann mir mal jemand den Watchdog erklären?
Was macht der und was macht er nicht?
Anscheinend bleibt der Speicherinhalt erhalten trotz das Setup() ausgeführt wird.
ich hab diese Meldung im EEprom gespeichert:
s_6868_4921_0
s=Setup_millis()/100_ Motordrehzahl_ mcusr Register
die wird in Setup() erzeugt.
:?:
oder kann das sein das der Reboot gar nicht vom Watchdog ausgelöst wird sondern von einem Hardware Problem?
Diese sporadischen reboots fallen zusammen mit der Auslösung eines Relais das einen Motor steuert, zwar mit Freilaufdiode aber wer weis?
ich verstehs nicht.
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Finger »

Das sind ein wenig zu wenig Informationen :-) Der Watchdog ist nur ein Timer, der läuft irgendwann über und löst einen Reset aus. Ausser, dieser Timer wird regelmäßig und rechtzeitig zurückgesetzt. Bei den kleinen AVRs kann der auch nicht durch dein Programm angehalten werden. Das ist quasi wie ein kompletter Neustart.

Warum du jetzt in einen Reset läufst ist unklar. Du kannst folgende Dinge tun:

1. Watchdog abschalten und schauen, was passiert
2. Dir das Register für die Resetquelle nach dem Start anschauen. Da steht z.B. drin, ob das Ding in einen Brownout gelaufen ist, der Watchdog ausgelöst hat und so weiter

Die 2. bedingt aber, das der Bootloader nicht da ist, der setzt das Register nämlich zurück. Hast du die Möglichkeit, den wegzuhauen?

Mit
ich hab diese Meldung im EEprom gespeichert:
s_6868_4921_0
s=Setup_millis()/100_ Motordrehzahl_ mcusr Register
die wird in Setup() erzeugt.
kann ich so im Moment nichts anfangen. Kannst du mal sagen, welches Zielsystem du nutzt und vielleicht den ganzen Code posten?
ch_ris
Beiträge: 3029
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

das läuft auf einem Nano 328p 16 mhz, komplett wird zu viel glaub ich, hier das relevanteste:

Code: Alles auswählen

/*Saving the value of MCUSR in \c mcusr_mirror is only needed if the
 application later wants to examine the reset source, but in particular,
 clearing the watchdog reset flag before disabling the
 watchdog is required, according to the datasheet.*/
uint8_t mcusr_mirror __attribute__ ((section (".noinit")));

void get_mcusr(void) __attribute__((naked))
__attribute__((section(".init3")));
void get_mcusr(void) {
	mcusr_mirror = MCUSR;
	MCUSR = 0;
	wdt_disable();
}

volatile uint16_t rPM = 0;
setup(){
init zeugs....
rec.addMsg(rec.MSG_AVR_START, millis(), rPM, mcusr_mirror, true);
// wie kann millis hier 686800 liefern?
mcusr_mirror = 0x00;
wdt_enable(WDTO_250MS);
}
loop(){
  	........
	wdt_reset();
}
die Methode addMSG legt die Meldung in ein Array, die werden dann wenn Zeit ist in den EEprom geschrieben.
Bootloader ist noch drin, technisch kann ich ihm rausschmeißen, flashen wird dann umständlich weil das sehr verbaut ist.
Muss ich wohl machen um einen zuverlässigen Register Inhalt zu kriegen.

hier ein Ausschnitt aus dem logging:

Code: Alles auswählen

P_6395_10781_33
B_6447_7031_155 //reguläre logging einträge....
B_6484_5156_106
Q_6744_10078_255
P_6744_10078_46
B_6867_4921_100
s_6868_4921_0 // hier neustart
Q_7095_10312_255
P_7095_10546_47
B_7149_8203_186
Q_7437_10546_255
P_7438_10546_54
Q_7465_10781_255
P_7465_10781_39
B_7511_7968_179
B_7560_5625_118
s_7563_5625_0// hier neustart
Q_7814_10312_255
die erste Zahl ist die Laufzeit in 1/10sec,
die zweite die Motordrehzahl,
die dürfte ja noch nicht bekannt sein wenn das Ding neu initialisiert, und die Laufzeit kleiner.
Der flüchtige Speicher scheint aber komplett unangetastet zu sein.
Warum, ist die/meine Hauptfrage.
Die Ursache für den Reset, kann keiner wissen, muss ich dann erforschen.

Testen kann ich nur im Betrieb.
ich kann mir's nicht leisten das sich der aufhängt.
hatte ich vermutlich schon, daher der Watchdog.
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Finger »

OK, ich wusste garnicht, das

wdt_disable();

unsterstützt wird. Ist mir prinzipiell unsympatisch, aber manchmal geht das nicht anders. Was passiert, wenn du den Watchdog dauerhaft ausschaltest? Was mir gerade noch einfällt: Einstreuungen über das USB-Kabel. Ich hab für sowas schon optische Insolatoren gebaut um das in den Griff zu kriegen. Oder Kabel ab und nur den TX-Pin vom Controller über einen Optokoppler in den PC geschleust um Debugausgaben zu sehen.
Was bedeuten Buchstaben und die dritte Zahl? Ich behaupte, du hast garkeinen Reset....
ch_ris
Beiträge: 3029
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

hab den code nur aus der wdt.h rauskopiert, keine Ahnung ob das das tut.
hab das disable übernommen aus Angst, nicht das der in eine Todesschleife gerät.

die Grossbuchstaben sind reguläre Ereignisse, die letzte Zahl ist meist eine Zeitdauer (ms)
oder eben der MCUSR Inhalt (der gelogene)

Ein USB Kabel hängt tatsächlich dauerhaft dran, verdammt.
Finger hat geschrieben: Mo 5. Sep 2022, 11:32 Ich behaupte, du hast garkeinen Reset....
ist das gut oder schlecht? :lol:
hab auch schon den Verdacht gehabt und gesucht, finde aber keine Erklärung für die am Schuss stehende Null.
Das will nichts heißen, ich kenne mich für total bescheuerte Programmier- oder auch Löt-Fehler.
Wenn es nicht sein kann! das der Speicher beim Reset erhalten bleibt, muss es irgendsowas sein.
Hilft mir auch weiter. Danke :!:

Was passiert wenn ich den Watchdog jetzt wegnehme kann ich nicht sagen.
Kann's nur selten, auf abgesperrter Strecke, testen. Dieses Jahr eh nicht mehr.
Außerdem passiert das ja nur sporadisch.
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Moin, ich löte mal wieder in C herum:

Ich hab einen Status INT zb:
Status= 0b11000001
Das ist ein Statusregister und ich möchte jetzt das Statusregister als einzelne Strings senden, also Zb bei
0b11000001

Code: Alles auswählen

7 CHG : 6 DSG : 5 VGOOD: 4 OVTEMP : 3 UV : 2 OV : 1 OCD : 0 SCD
soll heraus kommen

CHG, DSG, SCD

Wie löse ich das ohne 8 If schleifen?
so:?

char reg[7][6]{"CHG","DSG","VGOOD","OVTEMP","UV","OV","OCD","SCD"}

for ( int a = 0; a<255;a**){
int count=(status|a);
outstring= reg[count];
print (outstring);
}
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

So gehts:

Code: Alles auswählen

char reg[8][7]{"SCD","OCD","OV","UV","OVTEMP","VGOOD","DSG","CHG"};

Code: Alles auswählen

int status = read_reg(0x00);
  for (int a = 0; a <= 7; a++)
  {
    int out = status & (1 << a);
    if (out)
    {
      Serial.println(reg[a]);
    }
  }
ch_ris
Beiträge: 3029
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

huch, wenn ich nach nano v3 suche, bekomme ich vermehrt Angebote mit tiny88 oder mega168,
anstatt mega328p.
?
die mit tiny88 scheinen keinen usb chip zu haben. soft usb? nee danke.
die mit mega168 haben einen ch340.

was für ein bootloader werden die wohl haben, bzw wie compilier ich und krieg den code da drauf?
hat jemand schon Erfahrungen mit denen?
Benutzeravatar
Alexander470815
Beiträge: 2371
Registriert: So 11. Aug 2013, 15:42
Wohnort: D:\Hessen\Gießen

Re: Der AVR-/ARDUINO-Faden

Beitrag von Alexander470815 »

Im Zweifelsfall einfach mit einem USBasp.
Die Nano mit den 328p drauf haben jetzt teilweise auch 328pb drauf.
Neulich habe ich aber welche erwischt die fehlerhaft sind und manchmal abstürzen.
ch_ris
Beiträge: 3029
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

das problem scheint verbreitet: https://www.mikrocontroller.net/topic/449723
https://www.pololu.com/file/0J1464/Atme ... T15007.pdf

vielleicht wär das mit dem tiny88 gar nicht doof. kost die Hälfte.
Toolchain (attinycore, ohne bootloader) hab ich, Adapter auch.
Hab aber erstmal bei Ali mit, hoffentlich, 328p bestellt.
Benutzeravatar
Alexander470815
Beiträge: 2371
Registriert: So 11. Aug 2013, 15:42
Wohnort: D:\Hessen\Gießen

Re: Der AVR-/ARDUINO-Faden

Beitrag von Alexander470815 »

Auf denen die ich habe steht 328P drauf, sie identifiziert sich aber als 328PB.
6stk von dem einen Verkäufer laufen auch klaglos mit 16MHz und verrichten ihre Arbeit, die anderen 9stk aus anderer Quelle stürzen alle paar Sekunden ab. Der Programmcode zählt einfach nur variablen hoch und gibt diese auf der UART aus.
Von daher gehe ich von einem Hardware defekt aus.
ch_ris
Beiträge: 3029
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

:shock: Das werd ich sofort! prüfen. Danke.
Benutzeravatar
Weisskeinen
Beiträge: 3943
Registriert: Di 27. Aug 2013, 16:19

Re: Der AVR-/ARDUINO-Faden

Beitrag von Weisskeinen »

Alexander470815 hat geschrieben: Mi 5. Okt 2022, 06:55 Auf denen die ich habe steht 328P drauf, sie identifiziert sich aber als 328PB.
6stk von dem einen Verkäufer laufen auch klaglos mit 16MHz und verrichten ihre Arbeit, die anderen 9stk aus anderer Quelle stürzen alle paar Sekunden ab. Der Programmcode zählt einfach nur variablen hoch und gibt diese auf der UART aus.
Von daher gehe ich von einem Hardware defekt aus.
Laufen die abstürzenden auch tatsächlich mit 5V oder nur mit 3,3V?
Benutzeravatar
Alexander470815
Beiträge: 2371
Registriert: So 11. Aug 2013, 15:42
Wohnort: D:\Hessen\Gießen

Re: Der AVR-/ARDUINO-Faden

Beitrag von Alexander470815 »

Weisskeinen hat geschrieben: Do 6. Okt 2022, 14:11 Laufen die abstürzenden auch tatsächlich mit 5V oder nur mit 3,3V?
5V, da Arduino Nano Standard Board direkt mit 5V gespeist aus einem 7805.
Zusätzliche Abblockkondensatoren bringen keine Veränderung.
Habe auch nochmal direkt an den Pins nachgemessen, bekommt auch die 5V.
ch_ris
Beiträge: 3029
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

meine 5 Nanos sind gekommen, melden sich ordnungsgemäß als 328P, per ISP gefragt. zumindest der eine getestete.
Hier gibt's (auch?) eine Problematik mit den PB:
https://wiki.mobaledlib.de/

Hast du mal ohne Bootloader probiert?
KA ob ein falscher die zum abstützen bringen könnte. oder falsche Fuses.
nochmal edit bzgl unten . ah so. ok.
Zuletzt geändert von ch_ris am Fr 21. Okt 2022, 06:36, insgesamt 2-mal geändert.
Benutzeravatar
Alexander470815
Beiträge: 2371
Registriert: So 11. Aug 2013, 15:42
Wohnort: D:\Hessen\Gießen

Re: Der AVR-/ARDUINO-Faden

Beitrag von Alexander470815 »

Die Abstürze habe ich jetzt in den Griff bekommen indem ich noch direkt an die Versorungspins einen 100n gelötet habe. Damit funktioniert es zuverlässig.
Irgendwas ist mit den Platinen komisch.
Das es ein PB ist stört mich eigentlich nicht, der kann immerhin mehr.
Benutzeravatar
Toni
Beiträge: 2523
Registriert: Di 13. Aug 2013, 18:24

Re: Der AVR-/ARDUINO-Faden

Beitrag von Toni »

Hallo,
ich suche eine Divisionsroutine für 8 Bit Prozessor (ATTINY).

das hier funktioniert, ich bräuchte es aber für (24Bit : 16 Bit) = (16 Bit), also mit 3 Byte Dividenten, 2 Byte Divisor, 2 Byte Ergebnis.
http://www.avr-asm-tutorial.net/avr_de/ ... div8d.html

Code: Alles auswählen

div:
;.DEF rd1l = R0 ; LSB Divident
;.DEF rd1h = R1 ; MSB Divident
;.DEF rd1u = R2 ; Hifsregister
;.DEF rd2  = R3 ; Divisor
;.DEF rel  = R4 ; LSB Ergebnis
;.DEF reh  = R5 ; MSB Ergebnis
;.DEF rmp  = R16; Hilfsregister zum Laden
;
; Divieren von rd1h:rd1l durch rd2
div8:
	clr rd1u ; Leere Hilfsregister
	clr reh  ; Leere Ergebnisregister
	clr rel  ; (Ergebnisregister dient auch als
	inc rel  ; Zähler bis 16! Bit 1 auf 1 setzen)
;
; Hier beginnt die Divisionsschleife
;
div8a:
	clc                  ; Carry-Bit leeren
	rol rd1l             ; nächsthöheres Bit des Dividenten
	rol rd1h                 ; in das Hilfsregister rotieren
	rol rd1u    ; (entspricht Multipliklation mit 2)
	brcs div8b             ; Eine 1 ist herausgerollt, ziehe ab
	cp rd1u,rd2  ; Divisionsergebnis 1 oder 0?
	brcs div8c    ; Überspringe Subtraktion, wenn kleiner
div8b:
	sub rd1u,rd2  ; Subtrahiere Divisor
	sec           ; Setze carry-bit, Ergebnis ist eine 1
	rjmp div8d  ; zum Schieben des Ergebnisses
div8c:
	clc         ; Lösche carry-bit, Ergebnis ist eine 0
div8d:
	rol rel    ; Rotiere carry-bit in das Ergebnis
	rol reh
	brcc div8a  ; solange Nullen aus dem Ergebnis
	            ; rotieren: weitermachen
              ; Ende der Division erreicht
  ret    
ich komme leider nicht alleine drauf :cry: Kann mir jemand helfen?

EDIT: 16 Bit Divident reicht auch. Nur der Divisor muss auf 16 Bit erweitert werden

NOCHEINEDIT: ich habe bei Microcontroller.net das hier gefunden:

Code: Alles auswählen

Division
32 Bit / 32 Bit

Ergebnis gerundet, und mit Restbildung.

.def	a0	= r16
.def	a1	= r17
.def	a2	= r18
.def	a3	= r19

.def	b0	= r20
.def	b1	= r21
.def	b2	= r22
.def	b3	= r23

.def	t0	= r24
.def	t1	= r25
.def	t2	= r26
.def	t3	= r27

.def	t4	= r28

;************************************************************************
;*                                                                      *
;*                      unsigned rounded division 32 bit                *
;*                                                                      *
;************************************************************************

urdiv32:
	mov	t0, b0		;T = B
	mov	t1, b1
	mov	t2, b2
	mov	t3, b3
	lsr	t3		;B / 2
	ror	t2
	ror	t1
	ror	t0
	add	a0, t0		;A = A + B / 2
	adc	a1, t1
	adc	a2, t2
	adc	a3, t3

;************************************************************************
;*                                                                      *
;*                      unsigned division 32 bit                        *
;*                                                                      *
;************************************************************************

; a3..0 = a3..0 / b3..0 (Ganzzahldivision)
; b3..0 = a3..0 % b3..0 (Rest)

; cycle: max 684

udiv32:
	clr	t0
	clr	t1
	clr	t2
	clr	t3
	ldi	t4, 32
udi1:	lsl	a0
	rol	a1
	rol	a2
	rol	a3
	rol	t0
	rol	t1
	rol	t2
	rol	t3
	cp	t0, b0
	cpc	t1, b1
	cpc	t2, b2
	cpc	t3, b3
	brcs	udi2
	sub	t0, b0
	sbc	t1, b1
	sbc	t2, b2
	sbc	t3, b3
	inc	a0
udi2:	dec	t4
	brne	udi1
	mov	b0, t0
	mov	b1, t1
	mov	b2, t2
	mov	b3, t3
	ret

Eine Version, die je nach konkreten Zahlen Rechenzeit einspart

.def	a0	= r16
.def	a1	= r17
.def	a2	= r18
.def	a3	= r19

.def	b0	= r20
.def	b1	= r21
.def	b2	= r22
.def	b3	= r23

.def	t0	= r24
.def	t1	= r25
.def	t2	= r26
.def	t3	= r27

;************************************************************************
;*                                                                      *
;*                      unsigned rounded division 32 bit                *
;*                                                                      *
;************************************************************************

urdiv32:
	mov	t0, b0		;T = B
	mov	t1, b1
	mov	t2, b2
	mov	t3, b3
	lsr	t3		;B / 2
	ror	t2
	ror	t1
	ror	t0
	add	a0, t0		;A = A + B / 2
	adc	a1, t1
	adc	a2, t2
	adc	a3, t3

;************************************************************************
;*                                                                      *
;*                      unsigned division 32 bit                        *
;*                                                                      *
;************************************************************************
;cycle: max 431 (63%) (684)

udiv32:
	clr	t1
	tst	b3
	breq	udi10
	ldi	t0, 8
udi1:	lsl	a0
	rol	a1
	rol	a2
	rol	a3
	rol	t1
	cp	a1, b0
	cpc	a2, b1
	cpc	a3, b2
	cpc	t1, b3
	brcs	udi2
	sub	a1, b0
	sbc	a2, b1
	sbc	a3, b2
	sbc	t1, b3
	inc	a0
udi2:	dec	t0
	brne	udi1
	mov	b0, a1
	clr	a1
	mov	b1, a2
	clr	a2
	mov	b2, a3
	clr	a3
	mov	b3, t1
	ret

udi10:	tst	b2
	breq	udi20
	ldi	t0, 16
udi11:	lsl	a0
	rol	a1
	rol	a2
	rol	a3
	rol	t1
	brcs	udi12
	cp	a2, b0
	cpc	a3, b1
	cpc	t1, b2
	brcs	udi13
udi12:	sub	a2, b0
	sbc	a3, b1
	sbc	t1, b2
	inc	a0
udi13:	dec	t0
	brne	udi11
	mov	b0, a2
	clr	a2
	mov	b1, a3
	clr	a3
	mov	b2, t1
	ret

udi20:	tst	b1
	breq	udi30
	ldi	t0, 24
udi21:	lsl	a0
	rol	a1
	rol	a2
	rol	a3
	rol	t1
	brcs	udi22
	cp	a3, b0
	cpc	t1, b1
	brcs	udi23
udi22:	sub	a3, b0
	sbc	t1, b1
	inc	a0
udi23:	dec	t0
	brne	udi21
	mov	b0, a3
	clr	a3
	mov	b1, t1
	ret

udi30:	ldi	t0, 32
udi31:	lsl	a0
	rol	a1
	rol	a2
	rol	a3
	rol	t1
	brcs	udi32
	cp	t1, b0
	brcs	udi33
udi32:	sub	t1, b0
	inc	a0
udi33:	dec	t0
	brne	udi31
	mov	b0, t1			;store remainder
	ret
;------------------------------------------------------------------------

das bastele ich mal rein, und teste es
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Lässt sich beim Arduino der CS-Pin des SPI Bus über einen PCF8574 Port Expander routen?
Der normale Aufruf ist

MCP2515 mcp2515(3); // CS Pin

Muss ich die MCP2515 Klasse dafür umbauen, oder wie kann man das machen.

Den Pin schreibe ich über

PCF8574(addr).write(pin, state);
ch_ris
Beiträge: 3029
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

Keine Ahnung.
Würde meinen du könntest die zuständige Routine der MCP2515 Lib in deinem eigenen Code überladen/überschreiben.
Dann musst du an der Lib selbst nix ändern.
Frag mich ned wie das geht in C(++)
Vielleicht?:
Lib::sendZeug(){
mach mein ding statt deins;
}
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

ch_ris hat geschrieben: Mi 28. Dez 2022, 08:38 Keine Ahnung.
Würde meinen du könntest die zuständige Routine der MCP2515 Lib in deinem eigenen Code überladen/überschreiben.
Dann musst du an der Lib selbst nix ändern.
Frag mich ned wie das geht in C(++)
Vielleicht?:
Lib::sendZeug(){
mach mein ding statt deins;
}
Also könnte ich schlecht schreiben: Adriano mach was ich will!. Hätte ichAuch selber drauf kommen können.
ch_ris
Beiträge: 3029
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

Hä? versteh ich nich, egal...
welche Lib benutzt du? ich hab hier 3 zur Auswahl.
2022-12-30 07_49_18-Window.png
2022-12-30 07_49_18-Window.png (6.87 KiB) 953 mal betrachtet
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Ich benutze diese Lib:

https://github.com/atc1441/arduino-mcp2515
Damit spreche ich mit dem Conti Akku.
Jedoch hab ich 20 Akkus und die Akkus haben alle die gleiche CAN-ID so das ich 20x den MCP2515 habe und dessen CS per PCF portexpander bedienen muss.
Benutzeravatar
Alexander470815
Beiträge: 2371
Registriert: So 11. Aug 2013, 15:42
Wohnort: D:\Hessen\Gießen

Re: Der AVR-/ARDUINO-Faden

Beitrag von Alexander470815 »

Ich habe so eine Problemstellung mal umgangen indem ich den CS Pin einfach mit einem Analog Multiplexer umgeschaltet habe :lol:
Das ganze in Software lösen ist natürlich eleganter.
ch_ris
Beiträge: 3029
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

Die benutzt SPI, der expander I2C.
kann man das einfach so mischen in dem Zusammenhang?
(ich nix weiss)

Ich nehme an die Adresse vom Akku ändern geht nicht.
Reicht der Speicher für 20 Can Objekte? oder willst das jedes Mal neu initialisieren?
von Seeed gibts I2C Can Module. Ob das besser wäre?

noch mal pseudo code:
PCF8574 *ex[8];
int addr[8] = {0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27};
for(int i = 0;i < 8;i++) ex = new PCF8574(addr);
CanDings.init(*ex[7]);
:?:
sorry, leider nur Fragen keine Antworten.

oder, (wie@Alexander sacht) du brauchst doch nur ein paar oder einen CanDing wenn du dahinter expanderst?
Lokaro
Beiträge: 16
Registriert: So 20. Nov 2022, 23:18

Re: Der AVR-/ARDUINO-Faden

Beitrag von Lokaro »

@Hightech
Du kannst die 3 wichtigen Dateien (can.h, mcp2515.cpp und mcp2515.h) aus der Library in deinen Arduino Sketch Ordner kopieren und am besten noch den Namen ändern (von den Dateien aber auch der library selber, also überall wo "MCP2515" vorkommt zu etwas eigenem Ändern, dann gibt es keine Kollision mit der "richtigen" lib das inlcude in der .h natürlich auch zu dem eigenen) dann kannst du die lib direkt editieren und das eigenen CS verhalten einfügen.

Am einfachsten wäre es ein Callback für das CS in der lib zu machen, sprich jedes mall wenn ein startSPI oder stopSPI aufgerufen wird wird eine Funktion im Main Sketch aufgerufen

Dann braucht es nur eine CAN Instanz
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Ich hab den Punkt in der Lib nicht gefunden, an der der CS bedient wird,
Man übergibt der mcp2515(cs-Pin) ich sehe nur nicht, wo das am Ende landet, dort würde ich das dann über den I2C Expander umbiegen.
he25rb
Beiträge: 35
Registriert: So 4. Dez 2016, 14:18

Re: Der AVR-/ARDUINO-Faden

Beitrag von he25rb »

Hier:

mcp2515.cpp

void MCP2515::startSPI() {
SPIn->beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0));
digitalWrite(SPICS, LOW);
}

void MCP2515::endSPI() {
digitalWrite(SPICS, HIGH);
SPIn->endTransaction();
}

mfg herb
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Danke, das hab ich nicht gesehen.

Ich habe die LIB mal um gebogen.
So kann ich mit

MCP2515 mcp2515(0x3E, 3)
machen, das Schreiben klappt schon mal, aber lesen tut es nicht ... komisch
Der Akku bleibt an, weil der die Befehle empfängt, aber die gesendeten Daten kann ich nicht einlesen.


Code: Alles auswählen

MCP2515::MCP2515(const uint8_t _CsAddr, const uint8_t _CS)
{
  SPI.begin();
  SPICS = _CS;
  CsAddr= _CsAddr;
  PCF8574(CsAddr).begin();
  endSPI();
}

void MCP2515::startSPI() {
  SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0));
  PCF8574(CsAddr).write(SPICS, 0);
}

void MCP2515::endSPI() {
  PCF8574(CsAddr).write(SPICS, 1);
  SPI.endTransaction();
}
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

UUUNd der nächste Fuck, bittschön:

Der PCF8574 macht beim schalten von Pin x an jeder Flanke einen Peak auf Pin y.
Watt soll dat denn??

Muss ich da was blocken?
Jannyboy
Beiträge: 1406
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der AVR-/ARDUINO-Faden

Beitrag von Jannyboy »

Hightech hat geschrieben: Fr 30. Dez 2022, 23:29 Muss ich da was blocken?
Wäre mir neu.
Sind die Ausgänge auch richtig verschaltet?
Es sind nämlich nur OC-Ausgänge die nur Masse schalten können. VCC ist nur eine Stromquelle die ein paar uA liefert.

Was passiert ist das der Interrupt-Ausgang auch beim setzen der Ausgänge schaltet, das muss man per Software lösen.

Edit meint: Abblockkondensator vergessen?

Grüße Jan
Zuletzt geändert von Jannyboy am Fr 30. Dez 2022, 23:41, insgesamt 1-mal geändert.
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

So sieht das aus:
SDS00001.png
Jannyboy
Beiträge: 1406
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der AVR-/ARDUINO-Faden

Beitrag von Jannyboy »

Sieht fast nach POR-Reset aus.

Ich betreibe die Tierchen unter mit 4.7u + 100n an der Versorgung.

Grüße Jan
Benutzeravatar
Bastelbruder
Beiträge: 11483
Registriert: Mi 14. Aug 2013, 18:28

Re: Der AVR-/ARDUINO-Faden

Beitrag von Bastelbruder »

Es sind nämlich nur OC-Ausgänge die nur Masse schalten können. VCC ist nur eine Stromquelle die ein paar uA liefert.
Das stimmt nicht ganz.

Die Ausgänge haben zwar bloß einen schwachen Highside-Treiber, aaber es gibt da noch einen Transistor der die Flanke während des internen write-Impulses (SCL-Low-Phase während SDA-slave-ack) hart high zieht.

Das Oszillogramm sieht aber eher danach aus als hätte der Compiler zwei unmittelbar aufeinander folgende Schreibvorgänge produziert. Erst werden alle Ausgänge "off" (=high) gesetzt und mit dem zweiten Schreiben der gewünschte Ausgang gesetzt.

Etwas mehr Zoom und gleichzeitig SCL mit auf dem Schirm könnten das bestätigen.
Zuletzt geändert von Bastelbruder am Sa 31. Dez 2022, 12:28, insgesamt 1-mal geändert.
Jannyboy
Beiträge: 1406
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der AVR-/ARDUINO-Faden

Beitrag von Jannyboy »

Nur die Zeit ist dafür zu kurz.
Man benötigt 2 Byte, also 18Bit auf den I2C-Bus + Start- und Stop-Bedingung.
Also grob 190 uSec bei 100 kHz Busfrequenz. Das waren auf dem Bild ungefähr eine Div.

EDIT: Ich habe es gerade in einer sauberen Schaltung nach gemessen.
Da ist am Oszi nicht die leiseste Zuckung zu sehen.
Entrweder hasst du es mit Signalübersprechen zutun oder dein C ist richtig dimensioniert (siehe Oben)?

Grüße Jan
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Ich hab mal was zum schauen gemacht:
Kanal 1 ist der Pin3 den ich schalte
Kanal 3 ist Pin0, der soll aus sein.
Kanal2 SCL
Kanal 4 Data
Bild
Bild
Bild
Bild
Jannyboy
Beiträge: 1406
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der AVR-/ARDUINO-Faden

Beitrag von Jannyboy »

Das ist echt interessant.
Ich habe ein original NXP PCF8574T.

Kanal 1 ist SCL und Kanal 2 ist der Port-Pin.

Der Pin selbst schaltet von High auf Low.
scope_0.png
Der Nachbar-Pin schaltet von High nach Low, während der Pin selbst auf Low bleibt.
scope_1.png
Welchen Typ und Hersteller hast du genau?

Edit: Dein Verhalten passt zum TI PCF8574, siehe Dabla
Bildschirmfoto vom 2022-12-31 14-08-35.png
Grüße Jan
Antworten