Hallo, Habe gerade Probleme mit einem ATTiny24A im Bascom! Hier mal das Programm: 'Interner Takt v. 8MHz $regfile = "ATtiny24.DAT" $crystal = 1000000 Ddra = &B11111111 'Port A= Ausgang Do PinA.0=1 waitms 2000 PinA.0=0 PinA.1=1 waitms 2000 Loop End Es passiert folgendes: LED PINA.0 = EIN Nach ca. 4s ist PinA.1 = 1 und PinA.0 noch =1 Nach ca. 4s ist PINA.0 = 0 und PinA.1 noch =1 Nach ca. 4s ist PinA.1 = AUS Warum???? PinA.0 müsste eigentlich immer EIN sein! Also 1. Led1 = 1 2. Led2 = 1 1. Led1 = 0 2. Led2 = 0 Mit eimm gekauften BASCOM 2.0.7.7 und Atmel-Studio 4.19! als Programmer und einem MKII Der ganze Zyklus dauert 8s --- keine Ahnung warum! Schönen Abend noch und Gruß aus Magdeburg.
'Interner Takt v. 8MHz $crystal = 1000000 nun, die ersten Zeilen passen schonmal nicht zusammen. 1MHz vs. 8MHz
PS: A.1 wird einmal 1 gesetzt und das war es dann eigentlich, A.0 sollte wechseln ca. 1/4 Sekunde
PinX ist ein Eingangsregister, PortX ist das korrekte Ausgangsregister und manche neueren 8Bit Amtels toggeln das Ausgangsportbit, wenn auf den Eingang eine 1 geschrieben wird.
Sorry. PinA.1 sollte es auch heißen. Ich habe an den Ausgängen LEDs mit einem Vorwiderstand von 470 Ohm. Die LEDs sind an Masse. Ich habe eigentlich bei dem Befehl: PinA.X = 1 erwartet, daß der interne Widerstand (ca. 25kOhm) eingeschaltet wird. Die LEDs sollten dann nur ganz schwach leuchten. Aber sie werden voll angesteuert. Ja, der Tiny toggelt! und das sehr seltsam. LED (A.0) Ein, wait, LED (A.1) Ein, wait, LED (A.0) Aus, wait, LED (A.1) Aus, wait, und von vorn!!! Mit PortA.X arbeitet er korrekt! Danke
Hans-Jürgen H. schrieb: > PinA.X = 1 erwartet, daß der interne > Widerstand (ca. 25kOhm) eingeschaltet > wird. Der wird eingeschaltet, wenn PortX.y auf 1 und DDRX.y auf 0, also ein Eingang ist.
Danke MWS! Unter >>> https://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen#Zusammenfassung_der_Portregister kann man es nachlesen. Eine Interessante Funktion! Viele Grüße HJH
HJH-TT schrieb: > Danke MWS! Du solltest dich bei Weinbauer bedanken: Weinbauer schrieb: > PS: A.1 wird einmal 1 gesetzt und das war es dann eigentlich, A.0 sollte > wechseln ca. 1/4 Sekunde
Also, Du verwendest Befehle im ungeeigneten Kontext und ich fasse die Anmerkungen der Vorredner zusammen: Du schreibst nicht die Ausgänge, sondern ins Eingangsregister von A, deshalb toggeln die Ausgänge:
1 | PinA.0=1 |
Stattdessen musst Du nur...
1 | PortA.0=1 |
2 | PortA.1=0 |
... verwenden. Und die internen Pullups sind für den Betrieb als EINGANG vorgesehen, weil der Port im Betrieb aks AUSGANG sauber High/Low ausgibt (da gibts kein "bissel High zum LED antreiben"). Verständlich?
Marc V. schrieb: > Du solltest dich bei Weinbauer bedanken: > Weinbauer schrieb: >> PS: A.1 wird einmal 1 gesetzt und das war es dann eigentlich, A.0 sollte >> wechseln ca. 1/4 Sekunde Für was soll er sich denn bedanken? Dafür, dass Weinbauer nicht erkannt hat, dass auf Pin und nicht auf Port geschrieben wurde? Dementsprechend verhielt sich der Controller auch nicht so wie erwartet, statt dessen hat er eben beide Pins A0 und A1 getoggelt, da im Originalcode wiederholt eine 1 auf jedes der zwei Bits des Pin-Registers geschrieben wurde. Eben genauso wie's im Datenblatt steht: > Writing a logical one to PINxn toggles the value of PORTxn, Das deckt sich mit dem beobachteten Verhalten. Auch ist CKDIV8 beim ATiny24 per Default gesetzt und damit ergibt sich ein 1MHz Systemtakt, entsprechend der $Crystal Einstellung, welche damit auch richtig war, nur der Kommentar dazu war falsch. Und damit ist der Hinweis auf die 1/4 Sekunde Unsinn, zumal der TO etwas anderes beobachtet hat. Also hat Weinbauer eben nicht einmal im Ansatz den Kern des Problems erfasst und da Du seine Antwort scheinbar als die Richtige betrachtest, könnte man davon ausgehen, dass Du's auch nicht erfassen kannst. Jetzt bist Du ja nicht so der Blitzmerker, aber das solltest Du jetzt schon verstehen können ;D Und jetzt bitte keinen ellenlangen Posts wieder darüber, warum Deine Anmerkung trotz des gezeigten Unverständnisses völlig richtig gewesen sein soll.
Ja MWS hat schon wieder den Kern getroffen! Ich hatte durch Kopieren den falschen Befehl erwischt und wollte eigentlich nur wissen, warum sich der ATTiny24 so verhält. Und es ist kein Fehler in BASCOM sondern so wie es MWS gepostet hat! Mit internen Takt meinete ich: Ohne externen Quarz! Und der Haken für den Systemtakt bei den Fuses war gesetzt. Also >>> 1MHz! Danke und Ende
MWS schrieb: > hat er eben beide Pins A0 und A1 getoggelt, da im Originalcode > wiederholt eine 1 auf jedes der zwei Bits des Pin-Registers geschrieben > wurde. Sicher. Und woher soll er wissen was im Originalcode stand ? Im geposteten Code stand es jedenfalls so. MWS schrieb: > könnte man davon ausgehen, dass Du's auch nicht erfassen kannst. Jetzt > bist Du ja nicht so der Blitzmerker, aber das solltest Du jetzt schon > verstehen können ;D Hier: Beitrag "Re: Welche AVR besitzen die PIN Toggle Fähigkeit?" und hier: Beitrag "Re: Welche AVR besitzen die PIN Toggle Fähigkeit?" Oder einen von der älteren Beiträgen versuchen: Beitrag "Re: Atmega/C: eine Funktion aus einer Funktions heraus aufrufen" Lesen und weinen. HJH-TT schrieb: > Ja MWS hat schon wieder den Kern getroffen! Ja, wahrscheinlich hat er die obigen Beiträge gelesen.
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.