Guten Morgen, ich habe eine Schaltung auf dem Steckbrett gesteckt welches ein Modbus-RTU-Slave darstellt. Wenn ich den µC flashe funktioniert auch alles und zieht im Mittel 8-10mA. Ich kann es auch über Modbus ansprechen. Wenn ich sie dann z.B. Abends ausschalte und alles stromlos mache und morgens wieder anschließe zieht sie auf einmal um die 47mA und über Modbus lässt sie sich auch nicht mehr ansprechen. Erst wenn ich sie erneut flashe funktioniert alles wieder und zieht auch wieder 8-10mA. Weiß jemand was das für Ursachen haben kann? Hatte das vielleicht schon jemand?
ganz vergessen zu schreiben: Häng an irgend einen Pin 'ne LED (wenn nicht schon vorhanden) und lasse diese nach dem Einschalten kurz aufleuchten/blinken. Dann weisst du dass der Reset funktioniert.
Mathias O. schrieb: > Weiß jemand was das für Ursachen haben kann? Hatte das vielleicht schon > jemand? Latchup? Sind Abblockkondensatoren vorhanden?
MC mögen es garnicht, wenn ein Pin schon vor VCC Spannung hat und können dann in Latchup gehen. Daß Flashen hilft, ist aber komisch. Ein Latchup löst sich erst, wenn sämtliche Spannungen abgeschaltet werden.
It vlt. der flash schon so runtergekommen, dass er sich über nacht entlädt ?
Also der µC ist ein nagelneuer ATtiny841. Am Reset hängt ein 10k Pullup. Hab LEDs dran die beim einschalten aufleuchten und in der While-Schleife blinken. Das und SPI funktioniert immer. Nur halt das Modbus funktioniert dann nicht mehr. Abblock-C ist auch dran. Es ist schon ziemlich merkwürdig, dass es nach dem flashen wieder geht. Hab mal den Code in Anhang gepackt, vielleicht ist da irgendwo ein Fehler.
Wusste doch, dass ich was vergessen habe. Aber der FRAM ist noch nicht gesteckt.
Ziehe doch mal nach dem Einschalten RESET kurz auf Masse und schaue, was dann passiert.
Hab ich schon mehrmals gemacht. Funktioniert dann immernochnicht richtig.
Für Debugging geflasht? Einen Breakpoint im Programm?
Ne ist Release und keine Breakpoints. Dann würden die Breakpoints doch nicht erst da sein, wenn man einmal ausschaltet. es ist ja auch nur so wenn sie für mehrere Stunden aus ist. nach ein paar Minuten Auszeit funktioniert sie, nur nicht wenn länger ist. Als wenn sich irgendwas entlädt.
Ist die Spannung stabil und bleibt in den Grenzen 2.7-5.5V?
Ja das bleibt sie. Ein Brownout wird nicht ausgelöst.
Jap auf der Arbeit. Aber wenn es so wäre, würde es doch nicht nach neuflashen verschwinden.
Mathias O. schrieb: > Aber wenn es so wäre, würde es doch nicht nach neuflashen verschwinden. Hallo! Dein beschriebener Effekt könnte auch vom MODBUS-Treiber kommen. Schaltet der nach Reset auf Senden? Da könnte er gegen den Bus arbeiten. Am gleichen Signal hängt ja MOSI. Das könnte nach dem Flashen dann richtig (also L=Empfang) stehen.
In deinem Code fehlen leider die ganzen Modbus Routinen. Somit ist nicht nachvollziehbar, ob PA6 auf Ausgang geschaltet wird, bzw. welchen Pegel die Leitung dann haben wird (0 oder 1)
Ich wollte jetzt nicht alles hochladen. Das ist soviel. Das hier ist für PA6
1 | #define RTS_PIN PA6
|
2 | #define RTS_DDR DDRA
|
3 | #define RTS_PORT PORTA
|
4 | |
5 | #define RTS_INIT \
|
6 | do { \
|
7 | RTS_DDR |= _BV( RTS_PIN ); \
|
8 | RTS_PORT &= ~( _BV( RTS_PIN ) ); \
|
9 | } while( 0 );
|
10 | |
11 | #define RTS_HIGH \
|
12 | do { \
|
13 | RTS_PORT |= _BV( RTS_PIN ); \
|
14 | } while( 0 );
|
15 | |
16 | #define RTS_LOW \
|
17 | do { \
|
18 | RTS_PORT &= ~( _BV( RTS_PIN ) ); \
|
19 | } while( 0 );
|
Und in eMBInit macht er auf jedenfall RTS_INIT. Das ist ja alles aus Freemodbus.
Ich hab jetzt das ganze statt mit dem int. Eeprom, mit einem FRAM laufen. Jetzt funktioniert es wie gewünscht. Hat es was zutun mit dem Eeprom?
Mathias O. schrieb: > Hat es was zutun mit dem > Eeprom? Definitiv nein. Du hast noch was anderes am Code geändert.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
