Hallo Leute, ich hab hier ein komisches Phänomen... Hier liegen einige selbstgefertigte Moteinos (AVR Mini Pro mit RFM69 Modul) welche sich alle gleich verhalten: Schalte ich einen Pin in Software ein folgt das signal relativ zügig - schalte ich diesen wieder aus(selbst ohne Last) sehe ich eine Entladekurve. Ich dachte erst an eine fliegende Masse, aber dem ist nicht so - alle GND/AGND Pins sind nierderohmig angebunden. Das habe ich von oben auf die Pins gegen GND des Stützkondensators gemessen. Nun hab ich keinen Rat mehr... Der Pin geht in paar µs von 0 auf 3,3V und fällt jedoch 500µs lang von 3,3V auf 0V ab. Gibts da Fuses die Klemmen? Die Software ist mitlerweile auf direkte kommandos ohne Arduino Lib geschrumpft - sprich ich steure Mit PORTB|=... an. Alle anderen Module sind mitlerweile auskommentiert. Die Ports sind auch als Ausgang gesetzt und ich habe einige Pins durchprobiert. Ich hoffe ihr habt ne Idee.
Ra S. schrieb: > ich hab hier ein komisches Phänomen... Sitzt meistens vor der Schaltung. Ra S. schrieb: > Ich hoffe ihr habt ne Idee. Poste deinen Schaltplan und deine Software.
Ra S. schrieb: > geschrumpft - sprich ich steure Mit PORTB|=... an. Alle anderen Module > sind mitlerweile auskommentiert. Hast du beachtet, dass du den Pin erstmal per DDRB auf Ausgang schalten musst?! - ansonsten schaltest du nur die PullUps ein bzw. wieder aus, was das genannte Verhalten erklären KÖNNTE.
So ich bin "weiter"... Zum Schaltplan: https://lowpowerlab.com/wp-content/uploads/2016/09/R6_schematic.png Das Board liegt so vor mir und ich habe ein Picoscope mit Tastkopf welchen ich dann entsprechend umklemme. Am Board steckt ein RS232 Wandler um es zu programmieren. void setup() { // put your setup code here, to run once: DDRB |= (1<<PB2); } void loop() { PORTB &= ~(1 << PB2); delayMicroseconds(500); PORTB |= (1 << PB2); delayMicroseconds(500); } Damit teste ich gerade alles. Die Messungen im Anhang sind bei beiden Boards ähnlich - was mich nun total verwundert.
Kann es sein, dass da Reste der Arduino Software dir in die Suppe spucken? IIRC will der Arduino seine Ports mit eigenen Befehlen setzen. Entweder ganz auf Arduino verzichten oder am Anfang von loop() nochmals das DDR setzen.
Ra S. schrieb: > Zum Schaltplan: > https://lowpowerlab.com/wp-content/uploads/2016/09/R6_schematic.png Und bei den Messungen ist sonst nichts beteiligt? Nur das, was auf dem Schaltplan zu sehen ist? Auf welche Pins am µC beziehen sich die Pinnummern der Bilder? > PORTB |= (1 << PB2); Funkt dir da das Funkmodul und der möglicherweise initialisierte SPI rein?
:
Bearbeitet durch Moderator
Georg G. schrieb: > Kann es sein, dass da Reste der Arduino Software dir in die Suppe > spucken? Im Beispiel Code nicht. Georg G. schrieb: > IIRC will der Arduino seine Ports mit eigenen Befehlen setzen. Wieso sollte es? Es hat keinen "Willen". Georg G. schrieb: > Entweder ganz auf Arduino verzichten Das kann man natürlich tun. Hat aber keine Auswirkungen auf das Beispiel. Georg G. schrieb: > oder am Anfang von loop() nochmals > das DDR setzen. Das ist Unfug! setup() wurde schließlich genau dafür erfunden, um solche Dinge zu tun. ---------- Die Messung an Pin9.. Falscher Pegel. Kann laut Schaltplan nicht sein! Im Code ist davon nichts zu sehen.... ---------- Dein Code liefert auf meinem ATMega328P ein gestochen scharfes Rechteck. Und im Schaltplan kann ich keinen Fehler entdecken, welcher das verursachen könnte. Das Problem liegt also wohl woanders.
Ra S. schrieb: > DDRB |= (1<<PB2); Ja, Pin 10 (PB2) ist ein Ausgang und sein Oszillogramm sieht doch gut aus, oder?
Georg M. schrieb: > Ja, Pin 10 (PB2) ist ein Ausgang und sein Oszillogramm sieht doch gut > aus, oder? Natürlich! Aber das Bild von Pin9 sieht dämlich aus! Es hat nicht nur die vermeintliche "Ladekennlinie", sondern auch den falschen Pegel. Was ich eigentlich nicht sagen wollte: Es ist irgendwie eine dumme Idee, genau den Programmteil zu posten, welcher KEINE Probleme macht, und das andere, was Fehler produziert, geheim zu halten. Unfug ist das! Um auf eine solche Idee zu kommen, muss man schon ordentliche Scheuklappen entwickelt haben.
Arduino Fanboy D. schrieb: > Es ist irgendwie eine dumme Idee, genau den Programmteil zu posten, > welcher KEINE Probleme macht, und das andere, was Fehler produziert, > geheim zu halten. Erstmal muss er zu der Erkenntnis kommen, das sein gezeigter Code nicht die Ursache sein kann. Soweit war er ja bis gerade eben noch nicht. Danach kommt er mit seiner Fehlersuche weiter.
An den Oszi Bilder sieht man deutlich dass der OP schlicht vergessen hat die Pins im entsprechenden DDR Register auf Ausgang zu setzen. Denn bei PB2 sieht man deutlich die hochfrequenten Überschwinger. Die kommen durch einen nicht-idealen Aufbau, z.B. bei der Masseverbindung zu Oszi. In den anderen Bildern fehlen die - weil nur die viel schwächeren Pullups aktiv sind. So erklären sich auch die geringeren Spannungspegel und die Entladekurve bei PORTx.y = LOW. Denn dann sind die Pins schlicht hochohmig.
Hallo Leute, vielen Dank für die Infos. Jim hatte recht - mein code oben wurde erst aktiv als ich ein Make clean gemacht hab. Danach ging auch alles. Irgendwie ist die Arduino IDE Strange. Das "make clean" fehlt eh in der IDE - dazu muss man erst für ein anderes Board kompilieren. Alles schon eine starke Bastelbude - aber wenn es geht ist man sehr schnell. Gibt es alternativen zur IDE? Aber mit Bibliotheksmanager für Arduinos. LG
Make gibts sowieso nicht in der IDE. In den Einstellungen gibt es einen Menuepunkt zu "aggressivem zwischenspeichern". Vielleicht möchtest du den ja deaktivieren. Und nein, üblicherweise funktioniert das! Probleme kann es geben, wenn Anwendung und Temp Ordner auf unterschiedlichen Rechnern, mit unterschiedlichen SystemZeiten, liegen. Übrigens das Build Verzeichniss kannst du jederzeit händisch leeren. (oder gar eine Lösch Automatic in die IDE einbauen ungetestet)
Ra S. schrieb: > Gibt es alternativen zur (Arduino) IDE? Aber mit Bibliotheksmanager für Arduinos. Es soll entsprechende Plugins für Eclipse, Atmel Studio und Visual Studio geben. Ich benutze die Arduino IDE zum compilieren und flaschen in Kombination mit einem externen Editor meiner Wahl (derzeit QT Creator).
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.