Seite 27 von 31

Re: Der AVR-/ARDUINO-Faden

Verfasst: Mo 25. Jul 2022, 13:04
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Mo 25. Jul 2022, 13:05
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

Re: Der AVR-/ARDUINO-Faden

Verfasst: Mo 25. Jul 2022, 13:41
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.....

Re: Der AVR-/ARDUINO-Faden

Verfasst: Mo 25. Jul 2022, 14:16
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Mo 25. Jul 2022, 16:36
von xanakind
Hat völlig problemlos geklappt:
1.jpg
Die Firmware ist nun auf allen aufgespielt:
2.jpg
:D

Re: Der AVR-/ARDUINO-Faden

Verfasst: Fr 5. Aug 2022, 16:07
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

Re: Der AVR-/ARDUINO-Faden

Verfasst: Fr 5. Aug 2022, 18:32
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

Re: Der AVR-/ARDUINO-Faden

Verfasst: Fr 5. Aug 2022, 23:49
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?

Re: Der AVR-/ARDUINO-Faden

Verfasst: Sa 6. Aug 2022, 00:10
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Sa 6. Aug 2022, 09:58
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

Re: Der AVR-/ARDUINO-Faden

Verfasst: Sa 6. Aug 2022, 21:05
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

Re: Der AVR-/ARDUINO-Faden

Verfasst: Sa 6. Aug 2022, 21:39
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: So 7. Aug 2022, 06:44
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Mi 10. Aug 2022, 14:53
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

Re: Der AVR-/ARDUINO-Faden

Verfasst: Mo 5. Sep 2022, 09:39
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Mo 5. Sep 2022, 10:00
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?

Re: Der AVR-/ARDUINO-Faden

Verfasst: Mo 5. Sep 2022, 11:18
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Mo 5. Sep 2022, 11:32
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....

Re: Der AVR-/ARDUINO-Faden

Verfasst: Mo 5. Sep 2022, 12:20
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Sa 24. Sep 2022, 20:34
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);
}

Re: Der AVR-/ARDUINO-Faden

Verfasst: Sa 24. Sep 2022, 21:58
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]);
    }
  }

Re: Der AVR-/ARDUINO-Faden

Verfasst: Di 4. Okt 2022, 08:08
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?

Re: Der AVR-/ARDUINO-Faden

Verfasst: Di 4. Okt 2022, 10:25
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Mi 5. Okt 2022, 05:46
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Mi 5. Okt 2022, 06:55
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Mi 5. Okt 2022, 07:09
von ch_ris
:shock: Das werd ich sofort! prüfen. Danke.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Do 6. Okt 2022, 14:11
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?

Re: Der AVR-/ARDUINO-Faden

Verfasst: Do 6. Okt 2022, 21:02
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Fr 21. Okt 2022, 06:29
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Fr 21. Okt 2022, 06:35
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Sa 17. Dez 2022, 17:22
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

Re: Der AVR-/ARDUINO-Faden

Verfasst: Di 27. Dez 2022, 13:59
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);

Re: Der AVR-/ARDUINO-Faden

Verfasst: Mi 28. Dez 2022, 08:38
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;
}

Re: Der AVR-/ARDUINO-Faden

Verfasst: Mi 28. Dez 2022, 10:16
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Fr 30. Dez 2022, 08:51
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) 1016 mal betrachtet

Re: Der AVR-/ARDUINO-Faden

Verfasst: Fr 30. Dez 2022, 09:17
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Fr 30. Dez 2022, 09:48
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Fr 30. Dez 2022, 10:08
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?

Re: Der AVR-/ARDUINO-Faden

Verfasst: Fr 30. Dez 2022, 10:31
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

Re: Der AVR-/ARDUINO-Faden

Verfasst: Fr 30. Dez 2022, 13:56
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Fr 30. Dez 2022, 14:49
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

Re: Der AVR-/ARDUINO-Faden

Verfasst: Fr 30. Dez 2022, 22:02
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();
}

Re: Der AVR-/ARDUINO-Faden

Verfasst: Fr 30. Dez 2022, 23:29
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?

Re: Der AVR-/ARDUINO-Faden

Verfasst: Fr 30. Dez 2022, 23:40
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

Re: Der AVR-/ARDUINO-Faden

Verfasst: Fr 30. Dez 2022, 23:41
von Hightech
So sieht das aus:
SDS00001.png

Re: Der AVR-/ARDUINO-Faden

Verfasst: Fr 30. Dez 2022, 23:48
von Jannyboy
Sieht fast nach POR-Reset aus.

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

Grüße Jan

Re: Der AVR-/ARDUINO-Faden

Verfasst: Sa 31. Dez 2022, 12:14
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.

Re: Der AVR-/ARDUINO-Faden

Verfasst: Sa 31. Dez 2022, 12:26
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

Re: Der AVR-/ARDUINO-Faden

Verfasst: Sa 31. Dez 2022, 14:32
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

Re: Der AVR-/ARDUINO-Faden

Verfasst: Sa 31. Dez 2022, 15:00
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