Newbie problems/de

From MCS Wiki AVR
< Newbie problems(Difference between revisions)
Jump to: navigation, search
m (1 revision)
 
Line 1: Line 1:
== (**COPIED FROM ENGLISH PAGE**) ==When you are using the AVR without knowledge of the architecture you can experience some problems.
+
Wenn Sie BASCOM ohne genaue Kenntnis der AVR Architektur benutzen können Sie auf einige Punkte stoßen.
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
-I can not set a pin high or low
+
- Ich kann einen Port-Pin nicht auf High oder Low setzen
  
-I can not read the input on a pin
+
- Ich kann nicht von einem Eingabe-Pin einlesen
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
The AVR has 3 registers for each port. A port normally consists of 8 pins. A port is named with a letter from A-F. All parts have PORTB.
+
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.
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
When you want to set a single pin high or low you can use the SET and RESET statements. But before you use them the AVR chip must know in which direction you are going to use the pins.
+
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.
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
Therefore there is a register named DDRx for each port. In our sample it is named DDRB. When you write a 0 to the bit position of the pin you can use the pin as an input. When you write a 1 you can use it as output. You can also use CONFIG PORTX.Y= INPUT|OUTPUT
+
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
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
After the direction bit is set you must use either the PORTx register to set a logic level or the PINx register to READ a pin level.
+
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.
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
Yes the third register is the PINx register. In our sample, PINB.
+
Das dritte Register ist das PINx-Register. In unserem Beispiel PINB.
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
Line 31: Line 31:
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
For example we like to use PORTB.7 as an OUTPUT pin:
+
Wenn wir zum Beispiel PORTB.7 als AUSGABE-Pin benutzen möchten:
  
CONFIG PORTB.7=OUTPUT &nbsp;' will write a '1' to DDRB.7
+
CONFIG PORTB.7=OUTPUT &nbsp;' schreibt eine '1' in DDRB.7
  
SET PORTB.7 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;' will set the MS bit to +5V
+
SET PORTB.7 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;' setzt das most significant Bit auf +5V
  
RESET PORTB.7 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ' will set MS bit to 0 V
+
RESET PORTB.7 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ' setzt das most significant Bit auf 0 V
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
<span style="font-family: Arial;">When using a PIN in INPUT mode, you can also activate an internal pull up resistor. Pull up means that the pin is connected with a resistor to VCC.</span>
+
<span style="font-family: Arial;">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.</span>
  
<span style="font-family: Arial;">To enable the pull up resistor, you need to write a '1' to the PORT register.</span>
 
  
<span style="font-family: Arial;">&nbsp;</span>
+
<span style="font-family: Arial;">Um den Pullup-Widerstand zu aktivieren schreiben Sie eine '1' in das PORT-Register
 +
</span>
  
Example to read PORTB.0 pin&nbsp;:
+
<span style="font-family: Arial;">&nbsp;</span>
  
CONFIG PORTB.0=INPUT ' clears DDRB.0
+
Beispiel zum Lesen vom PORTB.0-Pin&nbsp;:
  
PORTB.0=1 ' activate pull up
+
CONFIG PORTB.0=INPUT ' setzt DDRB.0 auf '0'
  
Print PINB.0 'will read LS bit and send it to the RS-232
+
PORTB.0=1 ' Internen Pullup-Widerstand aktivieren
 +
Print PINB.0 'Liest das Least Significant Bit (B.0) und gibt es über RS-232 aus
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
You may also read from PORTx but it will return the value that was last written to it and not the input of the pin.
+
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.
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
Line 63: Line 64:
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
To read or write whole bytes use&nbsp;:
+
Zum Lesen und Schreiben ganzer Bytes&nbsp;:
  
PORTB = 0 'write 0 to register making all pins low
+
PORTB = 0 'schreibt 0 in das Register wodurch alle Pins Low werden
  
PRINT PINB 'print input on pins
+
PRINT PINB 'gibt die Eingabe an den Pins aus
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
Line 73: Line 74:
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
== <span style="font-weight: bold;">I want to write a special character but they are not printed correct</span>: ==
+
== <span style="font-weight: bold;">Ich möchte Spezialzeichen schreiben aber sie werden nicht korrekt angezeigt</span>: ==
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
Well this is not a newbie problem but I put it here so you could find it.
+
Das ist nicht unbedingt ein Anfängerproblem aber es wird hier mit aufgeführt damit Sie es gut finden können.
  
Some ASCII characters above 127 are interpreted wrong depending on country settings. To print the right value use&nbsp;: PRINT "Test{123}?"
+
Einige ASCII-Zeichen über 127 werden falsch interpretiert in Abhängigkeit von den Landeseinstellungen. Um das richtige Zeichen auszugeben benutzen Sie&nbsp;: PRINT "Test{123}?"
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
The {xxx} will be replaced with the correct ASCII character.
+
Das {xxx} wird durch das richtige ASCII-Zeichen ersetzt.
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
You must use 3 digits otherwise the compiler will think you want to print {12} for example. This should be {012}
+
Sie müssen 3 Ziffern benutzen denn sonst denkt der Compiler, das Sie zum Beispiel {12} schreiben wollen. Sie müssen stattdessen {012} schreiben.
 +
 
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
Line 93: Line 95:
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
== <span style="font-weight: bold;">My application was working but with a new micro it is slow and print funny</span> ==
+
== <span style="font-weight: bold;">Mein Programm funktionierte gut aber mit einem neuen Mikrocontroller ist es langsam und gibt komische Ausgaben</span> ==
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
Most new micro’s have an internal oscillator that is enabled by default. As it runs on 1 or 4 or 8 MHz, this might be slower or faster then your external crystal. This results in slow operation.
+
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.
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
As the baud rate is derived from the clock, it will also result in wrong baud rates.
+
Da die Baudrate vom Takt abgeleitet ist ergeben sich auch falsche Baudraten.
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
Solution&nbsp;: change frequency with $crystal so the internal clock will be used.
+
Lösung&nbsp;: Ändern Sie die Taktzahl mit $crystal so dass sie dem internen Oszillator entspricht.
  
Or change the fuse bits so the external xtal will be used.
+
Oder ändern Sie die Fusebits so dass der externe Takt benutzt wird.
  
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
Line 113: Line 115:
 
<span style="font-family: Arial;">&nbsp;</span>
 
<span style="font-family: Arial;">&nbsp;</span>
  
== <span style="font-weight: bold;">Some bits on Port C are not working</span> ==
+
== <span style="font-weight: bold;">Einige Bits des Port C funktionieren nicht</span> ==
 +
 
 +
Einige Mikrocontroler haben ein JTAG-Interface. Disablen Sie dieses mit den Fusebits. Oder benutzen Sie DISABLE JTAG im Programmcode.
  
Some chips have a JTAG interface. Disable it with the proper fuse bit . Or use DISABLE JTAG in your code.
 
  
 
&nbsp;<br/><br/>{{Languages}}
 
&nbsp;<br/><br/>{{Languages}}
  
 
[[Category:BASCOM Language Fundamentals/de]]
 
[[Category:BASCOM Language Fundamentals/de]]

Latest revision as of 14:45, 16 February 2013

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