Forum: Mikrocontroller und Digitale Elektronik AT90USB1287 und Bascom- unverständliches Verhalten


von Gerd (Gast)


Lesenswert?

Hallo,

ich mach mal einen neuen Tread auf, denn mir dem Display hat das ja 
nichts mehr zu tun.

Ich habe mein Programm mit dem ich das DOG-M ansteuern will jetzt mal 
bis auf das wesentliche zusammengeschrumpft:

$regfile = "usb1287.dat"
$crystal = 16000000

Wdtcsr = &B00000000 'Watchdog abschalten ?
Config Pinf.1 = Output

Mar3:
Set Pinf.1
Goto Mar3
End

Wieso erzeugt das eine saubere Rechteckfolge an Pinf.1?

Mir fällt einfach nichts mehr ein, der Pin wird doch anderweitig nicht 
genutzt.
Hat vielleich jemand eine Idee?

Gruß Gerd

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Bei modernen AVRs toggelt das Seiten des PIN den betreffende IO-Port. 
Das habe ich in einem der Atmega Datenblätter gelesen. Vielleicht ist 
das beim usb1287 genauso.

von Gerd (Gast)


Lesenswert?

Hallo Stefan,

finde ich leider nichts genaues drüber.
An selben Port könnte man ja einen JTAG anschließen, dieser Pin wird 
dafür aber nicht benutzt.


Gruß Gerd

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> finde ich leider nichts genaues drüber.

Seite 72, vorletzter Abschnitt in 
http://www.atmel.com/dyn/resources/prod_documents/doc7593.pdf

von Gerd (Gast)


Lesenswert?

Hallo Stefan,

gefunden habe ich es, leider begreife ich es auf Grund meiner 
bescheidenen Englischkenntnisse nicht.

Verstehe den Sinn auch nicht, ein Pin der eine Recheckfolge ausgibt, 
wenn er mehrmals gesetzt wird, was bringt das?

Habe jetzt den ganzen Port als Ausgang gesetzt und JTAG deaktiviert, 
aber alles unverändert.
Einen anderen Pin habe ich auch schon getestet, genau das Gleiche.

Gruß Gerd

von Rolf I. (for_ro)


Lesenswert?

Du musst den Ausgang so setzen:
Set Portf.1

Gruß

Rolf

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Der Sinn... muss ich mir auch was ausdenken. Vielleicht wenn du ein 
Rechtecksignal für ein Blinken o.ä. machen willst?

Oder meinst du, warum man durch Schreiben in PIN PORT Umschalten kann?

Entweder ist es einfach ein Nebeneffekt der Hardwareentwicklung, der 
jetzt dokumentiert und nutzbar ist oder es ist bewusst so beim Design 
des AVR angelegt worden.

Ich müsste da auch erst nachschlagen, ob es auf einem anderen Weg 
möglich ist, mit nur einem ASM-Befehl ein Toggeln eines Outputpins zu 
bewirken. Soviel Ahnung habe ich von Assembler nicht, um das aus dem 
Stand zu entscheiden.

Definitiv ist diese Methode die schnellste Umschaltung, die man machen 
kann.

Zum Hintergrund: Ein Port hat drei Register - das Datenrichtugsregister 
(DDR), das zu lesbare /schreibbare Daten Register (PORT) und das lesbare 
Datenregister (PIN).

Bei den neueren AVRs ist jetzt der Spezialfall erklärt, was passiert, 
wenn man eine logische 1 in ein Bit des eigentlich nur lesbaren PIN 
Registers schreibt: Dann wird das entsprechende Bit des Datenregister 
PORT umgeschaltet (getoggelt).

Wenn du den Effekt nicht bewusst nutzen willst, ist dein Programm an und 
für sich an dieser Stelle "Käse"

Mar3:
Set Pinf.1
Goto Mar3

Besser wäre es so:

SET Portf.1  ' Portf.1 = 1
DO
LOOP

von Lektrikman1001 (Gast)


Lesenswert?

Mar3:
Set Pinf.1               <---- SET hier, und wo ist RESET?
Goto Mar3
End


versuche mal mit TOGGLE.

von Gerd (Gast)


Lesenswert?

Hallo Stefan,

darf ich dich Wohltäter nennen?
Ich weiß gar nicht, wie ich auf die Idee gekommen bin PINF.1 statt 
PORTF.1 zu benutzen.
Wahrscheinlich zu lange vor dem Monitor gesessen.

Ganz schön peinlich, den ganzen Tag damit verbracht.

Vielen Dank!

Gruß Gerd

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.