Der AVR-/ARDUINO-Faden
Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese
Re: Der AVR-/ARDUINO-Faden
Danke für die Info, also habe ich mir den mit dem FIrmwareupdate wohl gehimmelt
Ich werde später aber noch das ST Link utility testen, vielleicht geht es damit ja.
Ich werde später aber noch das ST Link utility testen, vielleicht geht es damit ja.
Re: Der AVR-/ARDUINO-Faden
Verstehe ich das richtig: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:
Benötigt werden:
vtref an 3,3V
SWDIO, SWDCLK, GND, reset
Du kannst mit deinem Programmer die Firmware auf meinem China-Clone neu aufspielen?
Die 3 Drähte da dranfummeln sollte ich hinbekommen
Ich melde mich aber dann nochmals
Re: Der AVR-/ARDUINO-Faden
Ha! mit dem alten ST Link Utility hat es auf anhieb (!) funktioniert:
So, jetzt noch die restlichen 6 Stück umprogrammieren.....
Danke für die Hilfe! So, jetzt noch die restlichen 6 Stück umprogrammieren.....
- Fritzler
- Beiträge: 12600
- Registriert: So 11. Aug 2013, 19:42
- Wohnort: D:/Berlin/Adlershof/Technologiepark
- Kontaktdaten:
Re: Der AVR-/ARDUINO-Faden
Oha, hochkant für mehr Packungsdichte oder was?
Wenn der alte ST Link geht, kannste den neuen damit ja nun auch coden.
Musst aber den Hardware Reset rausführen.
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
Hat völlig problemlos geklappt:
Die Firmware ist nun auf allen aufgespielt:
Re: Der AVR-/ARDUINO-Faden
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
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
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);
}
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
- Später Gast
- Beiträge: 1699
- Registriert: Di 5. Apr 2016, 22:03
- Wohnort: Karlsruhe
- Kontaktdaten:
Re: Der AVR-/ARDUINO-Faden
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
probier das mal aus
Re: Der AVR-/ARDUINO-Faden
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?
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?
- Später Gast
- Beiträge: 1699
- Registriert: Di 5. Apr 2016, 22:03
- Wohnort: Karlsruhe
- Kontaktdaten:
Re: Der AVR-/ARDUINO-Faden
Hirnfurz 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
Es gibt die SK6812 in 3 Versionen.Später Gast hat geschrieben: ↑Sa 6. Aug 2022, 00:10 Hirnfurz 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.
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
-
- Beiträge: 240
- Registriert: Mo 16. Feb 2015, 13:50
Re: Der AVR-/ARDUINO-Faden
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
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
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.
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
-
- Beiträge: 1663
- Registriert: So 11. Aug 2013, 13:55
Re: Der AVR-/ARDUINO-Faden
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:
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
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.
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
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'.
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
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.
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
JA genau das war es denke ich, die erste Verdrahtung ist ja über jeden Zweifel erhaben (hope) nur das die Kondensatoren fehlten.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?
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:
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
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.
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
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
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
kann ich so im Moment nichts anfangen. Kannst du mal sagen, welches Zielsystem du nutzt und vielleicht den ganzen Code posten?ich hab diese Meldung im EEprom gespeichert:
s_6868_4921_0
s=Setup_millis()/100_ Motordrehzahl_ mcusr Register
die wird in Setup() erzeugt.
Re: Der AVR-/ARDUINO-Faden
das läuft auf einem Nano 328p 16 mhz, komplett wird zu viel glaub ich, hier das relevanteste:
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:
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.
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();
}
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 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
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....
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
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.
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.
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.
ist das gut oder schlecht?
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
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
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);
}
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
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
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
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?
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?
- Alexander470815
- Beiträge: 2389
- Registriert: So 11. Aug 2013, 15:42
- Wohnort: D:\Hessen\Gießen
Re: Der AVR-/ARDUINO-Faden
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.
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
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.
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.
- Alexander470815
- Beiträge: 2389
- Registriert: So 11. Aug 2013, 15:42
- Wohnort: D:\Hessen\Gießen
Re: Der AVR-/ARDUINO-Faden
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.
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
Das werd ich sofort! prüfen. Danke.
- Weisskeinen
- Beiträge: 3948
- Registriert: Di 27. Aug 2013, 16:19
Re: Der AVR-/ARDUINO-Faden
Laufen die abstürzenden auch tatsächlich mit 5V oder nur mit 3,3V?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.
- Alexander470815
- Beiträge: 2389
- Registriert: So 11. Aug 2013, 15:42
- Wohnort: D:\Hessen\Gießen
Re: Der AVR-/ARDUINO-Faden
5V, da Arduino Nano Standard Board direkt mit 5V gespeist aus einem 7805.Weisskeinen hat geschrieben: ↑Do 6. Okt 2022, 14:11 Laufen die abstürzenden auch tatsächlich mit 5V oder nur mit 3,3V?
Zusätzliche Abblockkondensatoren bringen keine Veränderung.
Habe auch nochmal direkt an den Pins nachgemessen, bekommt auch die 5V.
Re: Der AVR-/ARDUINO-Faden
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.
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.
- Alexander470815
- Beiträge: 2389
- Registriert: So 11. Aug 2013, 15:42
- Wohnort: D:\Hessen\Gießen
Re: Der AVR-/ARDUINO-Faden
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.
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
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
ich komme leider nicht alleine drauf 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:
das bastele ich mal rein, und teste es
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
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
;------------------------------------------------------------------------
Re: Der AVR-/ARDUINO-Faden
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);
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
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;
}
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
Also könnte ich schlecht schreiben: Adriano mach was ich will!. Hätte ichAuch selber drauf kommen können.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;
}
Re: Der AVR-/ARDUINO-Faden
Hä? versteh ich nich, egal...
welche Lib benutzt du? ich hab hier 3 zur Auswahl.
welche Lib benutzt du? ich hab hier 3 zur Auswahl.
Re: Der AVR-/ARDUINO-Faden
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.
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.
- Alexander470815
- Beiträge: 2389
- Registriert: So 11. Aug 2013, 15:42
- Wohnort: D:\Hessen\Gießen
Re: Der AVR-/ARDUINO-Faden
Ich habe so eine Problemstellung mal umgangen indem ich den CS Pin einfach mit einem Analog Multiplexer umgeschaltet habe
Das ganze in Software lösen ist natürlich eleganter.
Das ganze in Software lösen ist natürlich eleganter.
Re: Der AVR-/ARDUINO-Faden
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?
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
@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
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
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.
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
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
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
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.
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
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?
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
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.
Re: Der AVR-/ARDUINO-Faden
So sieht das aus:
Re: Der AVR-/ARDUINO-Faden
Sieht fast nach POR-Reset aus.
Ich betreibe die Tierchen unter mit 4.7u + 100n an der Versorgung.
Grüße Jan
Ich betreibe die Tierchen unter mit 4.7u + 100n an der Versorgung.
Grüße Jan
- Bastelbruder
- Beiträge: 11550
- Registriert: Mi 14. Aug 2013, 18:28
Re: Der AVR-/ARDUINO-Faden
Das stimmt nicht ganz.Es sind nämlich nur OC-Ausgänge die nur Masse schalten können. VCC ist nur eine Stromquelle die ein paar uA liefert.
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.
Re: Der AVR-/ARDUINO-Faden
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
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
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. Der Nachbar-Pin schaltet von High nach Low, während der Pin selbst auf Low bleibt. Welchen Typ und Hersteller hast du genau?
Edit: Dein Verhalten passt zum TI PCF8574, siehe Dabla Grüße Jan
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. Der Nachbar-Pin schaltet von High nach Low, während der Pin selbst auf Low bleibt. Welchen Typ und Hersteller hast du genau?
Edit: Dein Verhalten passt zum TI PCF8574, siehe Dabla Grüße Jan