Forum: Mikrocontroller und Digitale Elektronik ATTiny24 und Bascom


von HJH-TT (Gast)


Lesenswert?

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.

von Weinbauer (Gast)


Lesenswert?

'Interner Takt v. 8MHz

$crystal = 1000000

nun, die ersten Zeilen passen schonmal nicht zusammen.

1MHz vs. 8MHz

von Weinbauer (Gast)


Lesenswert?

PS: A.1 wird einmal 1 gesetzt und das war es dann eigentlich, A.0 sollte 
wechseln ca. 1/4 Sekunde

von MWS (Gast)


Lesenswert?

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.

von HJ H. (Gast)


Lesenswert?

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

von MWS (Gast)


Lesenswert?

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.

von HJH-TT (Gast)


Lesenswert?

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

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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

von Uwe D. (monkye)


Lesenswert?

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?

von MWS (Gast)


Lesenswert?

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.

von HJH-TT (Gast)


Lesenswert?

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

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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
Noch kein Account? Hier anmelden.