Newbie problems/de

From MCS Wiki AVR
< Newbie problems
Revision as of 13:45, 16 February 2013 by Stefanhamburg (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Wenn Sie BASCOM ohne genaue Kenntnis der AVR Architektur benutzen können Sie auf einige Punkte stoßen.

 

- Ich kann einen Port-Pin nicht auf High oder Low setzen

- Ich kann nicht von einem Eingabe-Pin einlesen

 

Ein AVR Mikrocontroller hat drei Register für jeden Port. Ein Port besteht normalerweise aus 8 Pins. Ein Port trägt die Beizeichnung A-F. Jeder AVR Mikrocontroller hat einen PORTB.

 

Wenn Sie einen einzelnen Pin High oder Low setzen wollen dann können Sie den SET bzw. RESET Befehl benutzen. Vorher muss definiert werden ob die Pins für Eingabe oder für Ausgabe benutzt werden sollen.

 

Dafür gibt es ein Register mit dem Namen DDRx für jeden Port. In unserem Beispiel heißt es DDRB. Wenn Sie eine 0 an die entsprechende Position im DDR-Register schreiben dann kann der Pin für Eingabe benutzt werden. Wenn Sie eine 1 schreiben dann kann der Pin für Ausgabe benutzt werden. Sie können auch die folgende Schreibweise benutzen: CONFIG PORTX.Y= INPUT|OUTPUT

 

Nachdem das Richtungs-Bit (im DDR-Register) gesetzt ist kann man entweder das PORTx-Register zum Setzen eines Logik-Pegels benutzen oder das PINx-Register um den Pin-Zustand einzulesen.

 

Das dritte Register ist das PINx-Register. In unserem Beispiel PINB.

 

 

Wenn wir zum Beispiel PORTB.7 als AUSGABE-Pin benutzen möchten:

CONFIG PORTB.7=OUTPUT  ' schreibt eine '1' in DDRB.7

SET PORTB.7                    ' setzt das most significant Bit auf +5V

RESET PORTB.7                 ' setzt das most significant Bit auf 0 V

 

Bei Benutzung eines Pin als Eingabe-Pin kann man einen internen Pullup-Widerstand aktivieren. Pullup bedeutet, dass der Pin mit einem Widerstand mit VCC verbunden wird.


Um den Pullup-Widerstand zu aktivieren schreiben Sie eine '1' in das PORT-Register

 

Beispiel zum Lesen vom PORTB.0-Pin :

CONFIG PORTB.0=INPUT ' setzt DDRB.0 auf '0'

PORTB.0=1 ' Internen Pullup-Widerstand aktivieren Print PINB.0 'Liest das Least Significant Bit (B.0) und gibt es über RS-232 aus

 

Sie können auch PORTx lesen aber das gibt dann den Wert zurück, der zuletzt in PORTx geschrieben wurde und NICHT den Zustand am Eingabe-Pin.

 

 

Zum Lesen und Schreiben ganzer Bytes :

PORTB = 0 'schreibt 0 in das Register wodurch alle Pins Low werden

PRINT PINB 'gibt die Eingabe an den Pins aus

 

 

Ich möchte Spezialzeichen schreiben aber sie werden nicht korrekt angezeigt:

 

Das ist nicht unbedingt ein Anfängerproblem aber es wird hier mit aufgeführt damit Sie es gut finden können.

Einige ASCII-Zeichen über 127 werden falsch interpretiert in Abhängigkeit von den Landeseinstellungen. Um das richtige Zeichen auszugeben benutzen Sie : PRINT "Test{123}?"

 

Das {xxx} wird durch das richtige ASCII-Zeichen ersetzt.

 

Sie müssen 3 Ziffern benutzen denn sonst denkt der Compiler, das Sie zum Beispiel {12} schreiben wollen. Sie müssen stattdessen {012} schreiben.


 

 

Mein Programm funktionierte gut aber mit einem neuen Mikrocontroller ist es langsam und gibt komische Ausgaben

 

Die meisten neuen Mikrocontroller haben einen internen Oszillator, der werksseitig aktiviert ist. Da dieser mit 1, 4 oder 8 MHz läuft kann das langsamer oder schneller sein als Ihr externer Quartz. Daraus resultiert eine langsamere bzw. schnellere Taktung.

 

Da die Baudrate vom Takt abgeleitet ist ergeben sich auch falsche Baudraten.

 

Lösung : Ändern Sie die Taktzahl mit $crystal so dass sie dem internen Oszillator entspricht.

Oder ändern Sie die Fusebits so dass der externe Takt benutzt wird.

 

 

Einige Bits des Port C funktionieren nicht

Einige Mikrocontroler haben ein JTAG-Interface. Disablen Sie dieses mit den Fusebits. Oder benutzen Sie DISABLE JTAG im Programmcode.


 

Languages   English Deutsch  
Personal tools
Namespaces
Variants
Actions
Navigation
In other languages
Language