Hallo zusammen, Ich habe das Problem, dass bei einem Attiny1634 Pin PB3 (hw pin18) nicht als Input funktioniert. PC0 habe ich identisch initialisiert, hier funktionierts. PB3 funktioniert als Output, als Input jedoch gibt PB3 immer eine 0 zurück, auch bei aktiviertem Pull-Up. Hat jemand eine Idee, was ich übersehe? Hier der Testcode zur Anschauung. Die Inputs sind jeweils als Low-Active konfiguriert (Taster gegen Gnd). Im Testcode leuchtet die Debug-Led dauerhaft, da PB3 immer als 0 eingelesen wird. /* * ATtiny1634_io-test.c * */ #include <avr/io.h> // outputs, low-active #define EN_DEBUG_LED PORTC &= ~(1<<PC1); #define DIS_DEBUG_LED PORTC |= (1<<PC1); // inputs, low-active #define INPUT1 !(PINB & 1<<PB3) // geht noch ned #define INPUT2 !(PINC & 1<<PC0) int main(void) { DDRA = 0x00; PORTA = 0x00; DDRB = 0x00; PORTB = (1<<PB3); // enable pullup input1 DDRC = (1<<PC1); // set output debug-led PORTC = (1<<PC0); // enable pullup input2 while (1) { if(INPUT1 || INPUT2) { EN_DEBUG_LED;} else { DIS_DEBUG_LED;} } }
hier noch der Link zum Datenblatt des 1634: http://www.atmel.com/Images/Atmel-8303-8-bit-AVR-Microcontroller-tinyAVR-ATtiny1634_Datasheet.pdf thx!
Markus schrieb: > hier noch der Link zum Datenblatt des 1634: > http://www.atmel.com/Images/Atmel-8303-8-bit-AVR-Microcontroller-tinyAVR-ATtiny1634_Datasheet.pdf Und? Selber lesen kommt nicht in Frage? Dabei kommt raus, dass (neben einem Problem mit der Verdrahtung) nur eins als mögliche Ursache in Frage kommt: falsche Initialisierung von Timer1.
hey ehrengast, Fehler in der Verdrahtung kann ich ausschliessen. Im Datenblatt hab ich natürlich zuerst nach Hilfe gesucht, aber nix gefunden, deshalb die Frage, was ich übersehen habe. Timer1 wird hier garnicht genutzt/initialisiert, OC1A ist eine alternative Portfunktion, also gehe ich davon aus, dass default-mässig ein io konfiguriert ist? Wenn du einen Hinweis hast, wo oder nach was genau ich im Datenblatt suchen muss, wäre ich dankbar! (Anfänger...) gruess markus
1 | PORTB = (1<<PB3); // enable pullup input1 |
Die Jungens von Atmel sehen das evtl anders. Hör auf Sie.
neuer PIC Freund schrieb im Beitrag #4680204: > PORTB = (1<<PB3); // enable pullup input1 > Die Jungens von Atmel sehen das evtl anders. Hör auf Sie. Das ist schon richtig, das stimmt. Wobei ich da immer die Einstellung habe das ich es veroder - also PORTB |= (1<<PB3) - PB3 hat nun auch keine Sonderbaren (wie z.b. JTAG etc...) alternativen Zuweisungen. Im Grunde KANN es nur eine fehlerhafte Beschaltung sein.
Hallo Markus, ich vermute PIC Freund möchte dich auf etwas hinweisen: neuer PIC Freund schrieb im Beitrag #4680204: >
1 | > PORTB = (1<<PB3); // enable pullup input1 |
2 | >
|
> Die Jungens von Atmel sehen das evtl anders. Hör auf Sie.
Laut dem von dir verlinkten Datenblatt, S. 72:
PUEB – Port B Pull-up Enable Control Register
PORTB – Port B Data Register
Wenn du also den Pull-Up aktivieren möchtest, musst du, wie es sich mir
dastellt, das PUEB-Register bearbeiten.
Viel Erfolg und viele Grüße,
Alex
Ohh.. danke! Das kannt ich so auch noch nicht! PUExn... welche Atmels betrifft dies denn!?
Hallo Zusammen, erstmal Danke für eure Hilfe. Wiegesagt, Fehler an der Verdrahtung ist auszuschliessen. Schliesse ich einen externen 10k Pullup an den Pin, sieht man die Schalterbetätigung auf den Osci (direkt auf dem Pin gemessen). Allerdings beträgt die Spannung nur 2,6V anstelle von 5V. Scheint also intern noch etwas anderes zu passieren... Achja, auch mit externen Pullup funktioniert die Auswertung des Inputs nicht. @neuer Pic-Freund ok, intepretiere ich die Tabelle richtig, dass ich die Pullups mit PUEx und nicht mit PORTx (wenn als Einfang definiert) steuern muss? Wieso funktioniert es dann bei PC0 einwandfrei? hab die Initialisierung geändert auf: DDRB = 0x00; PUEB = (1<<PB3); //PORTB = (1<<PB3); // enable pullup input1 ändert sich aber nix am Verhalten. Weitere Hinweise nach was ich suchen muss im Datenblatt werden gerne entgegengenommen. Ist als Neuling relativ schwierig, sich da zurechtzufinden und die nötigen Informationen rauszusuchen... Danke für eure Hilfe!
Hallo Markus, ist dir der Unterschied zwischen
1 | PUEB = (1<<PB3); |
und
1 | PUEB |= (1<<PB3); |
bewusst ? Denn hier, in der Schreibweise, lauern weitere Fehler ! Was bedeutet dieser Ausdruch ?
1 | DDRB &= ~(1<<PB3); |
Hallo Karl, hm ja, der Unterschied ist mir soweit schon bewusst: PUEB = (1<<PB3); setzt PB3 auf 1, alle anderen bits werden mit 0 überschrieben PUEB |= (1<<PB3); setzt PB3 auf 1, alle anderen bits bleiben unverändert DDRB &= ~(1<<PB3); setzt PB3 auf 0, alle anderen bits bleiben unverändert Sollte aber in meinem Testcode keine Rolle spielen, da nur PB3 von PortB genutzt wird? thx! gruess markus
Markus schrieb: > Wiegesagt, Fehler an der Verdrahtung ist auszuschliessen. Ja klar, und die Rente ist sicher... > Schliesse ich > einen externen 10k Pullup an den Pin, sieht man die Schalterbetätigung > auf den Osci (direkt auf dem Pin gemessen). Allerdings beträgt die > Spannung nur 2,6V anstelle von 5V. Brauchst du NOCH MEHR Beweise für einen Schaltungsfehler? Das sieht doch sehr stark nach einem relativ hochohmigen Popel nach GND aus. Verkohltes Flussmittel z.B. käme da durchaus in Frage. > Scheint also intern noch etwas > anderes zu passieren... Das wäre natürlich auch noch eine Möglichkeit. Der Controller ist schlicht defekt. Dann passiert natürlich durchaus mal was anderes, als im DB steht. Allerdings: so leicht bekommt man einen AVR8 auch wieder nicht kaputt, da muss man schon richtig Scheisse gebaut haben.
hallo c-hater, ich schau mir den Aufbau am Dienstag nochmals genaustens an. ich habe zwei identisch bestückte PCBs, beide zeigen das selbe Verhalten. ich kanns mir kaum vorstellen, dass beim layouten, bestücken oder schaltungsdesign etwas dermassen daneben ging. aber who knows - evtl. seh ich den wald vor lauter bäumen nicht. die pause übers weekend ist da bestimmt hilfreich. ich meld mich dann wieder. gruess & thx, markus
Hallo, Schau mal im Datenblatt unter Errata Punkt 1. Vielleicht reicht's, wenn du den Watchdog enablest. Gruß, Sascha
Hallo Markus, sollte es wirklich an dem von Sascha genannten Punkt liegen, so wäre es super, wenn du es später hier mitteilst. captain schrieb: > Hallo, > > Schau mal im Datenblatt unter Errata Punkt 1. Vielleicht reicht's, wenn > du den Watchdog enablest. > Gruß, > Sascha Viel Erfolg und schönes Wochenende, Alex
Das kann auf jeden Fall Probleme machen. Da hatte ich mal einige Stunden viel Spaß! Watchdog an, und gut war's.
super, vielen dank für den Tipp, ich probiers am Dienstag! :) Gruss und auch ein schönes Wochenende! Markus
Mal so in den Raum gestellt: Was hat PB3 mit dem Watchdog zu tun?!
aus dem datenblatt: 31.1 ATtiny1634 31.1.1 Rev. C • Port Pin Should Not Be Used As Input When ULP Oscillator Is Disabled 1. Port Pin Should Not Be Used As Input When ULP Oscillator Is Disabled Port pin PB3 is not guaranteed to perform as a reliable input when the Ultra Low Power (ULP) oscillator is not running. In addition, the pin is pulled down internally when ULP oscillator is disabled. Problem Fix / Workaround The ULP oscillator is automatically activated when required. To use PB3 as an input, activate the watchdog timer. The watchdog timer automatically enables the ULP oscillator.
markus schrieb: > aus dem datenblatt: > > 31.1 ATtiny1634 > 31.1.1 Rev. C > • Port Pin Should Not Be Used As Input When ULP Oscillator Is Disabled > 1. Port Pin Should Not Be Used As Input When ULP Oscillator Is Disabled > Port pin PB3 is not guaranteed to perform as a reliable input when the > Ultra Low Power (ULP) oscillator is not > running. In addition, the pin is pulled down internally when ULP > oscillator is disabled. > Problem Fix / Workaround > The ULP oscillator is automatically activated when required. To use PB3 > as an input, activate the watchdog > timer. The watchdog timer automatically enables the ULP oscillator. Das steht dann aber nur in der Errata?! Warum schreibt man das dann nicht gleich mit zu die Portdefinitionen? Da suchst man sich doch dämlich damit!
Draco schrieb: > Da suchst man sich doch > dämlich damit! Richtig. Aber die Leute, die sofort mit der weisen Frage kommen: "Was steht denn im Datenblatt?" -die sollen sich ruhig einen Wolf suchen. Es steht eben NICHT alles im Datenblatt, was im Übrigen vom Umfang her eher ein DatenBUCH ist. MfG Paul
markus schrieb: > Port pin PB3 is not guaranteed to perform as a reliable input when the > Ultra Low Power (ULP) oscillator is not > running. Das ist natürlich der Hammer. Darauf wäre c-hater nie gekommen.
captain schrieb: > Hallo, > > Schau mal im Datenblatt unter Errata Punkt 1. Vielleicht reicht's, wenn > du den Watchdog enablest. > Gruß, > Sascha watchdog eingeschaltet, PB3 funktioniert. Vielen Dank an Sascha und alle anderen!! :) :) gruss und schöne Woche, Markus
Hallo Markus, bitte, gerne ;-) Freut mich, dass es jetzt geht! dir auch eine schöne Woche Gruß, Sascha
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.