CATEGORII DOCUMENTE |
Bulgara | Ceha slovaca | Croata | Engleza | Estona | Finlandeza | Franceza |
Germana | Italiana | Letona | Lituaniana | Maghiara | Olandeza | Poloneza |
Sarba | Slovena | Spaniola | Suedeza | Turca | Ucraineana |
DOCUMENTE SIMILARE |
|
Beispiel für ein Minimalsystem mit AT90C23213:
Zum Programmieren wird der Controller mit dem PC über einen Programmieradapter verbunden. Es gibt unterschiedliche Schaltungen, z.B. die folgende zum Programmieren über den Parallelport:
n Options - Compiler - Chip: richtiger Baustein ausgewählt?
n Options - Programmer
- STK200 / STK300
- Adresse des Parallelports
(LPT1 = 378h, LPT2 = 278h)
File - New
Quelltext schreiben
Program - Compile
Program - Send to chip
Bei umfangreicheren Programmen kann es nützlich sein, das Programm im
eingebauten Simulator auszutesten.
Programmstruktur (Beispiel):
‘Deklarationen + Initialisationen:
$CRYSTAL = 4000000
Config Portc = Output
Config Portb = Input
Config .
DIM VariableA as byte
DIM VariableB as integer
.
‘Hauptprogramm ist sehr oft eine Endlosschleife
DO
LOOP
END
Stolpersteine:
Chip nicht korrekt eingestellt
Vergessen, Port als Ein- oder
Ausgang zu konfigurieren
Wenn das Programm keine
Endlosschleife oder keinen END-Befehl enthält, wird erst das Programm
ausgeführt, danach aber sinnloser Schrott, nämlich die Befehle die sich aus den
zufälligen Speicherinhalten hinter dem letzten Befehl ergeben.
Konfiguration als Ein/Ausgang:
z.B.
Config PortB = Output / Input für den ganzen Port B
Config PinC.3 = Output für Bit 3 von PortC
Werte setzen:
PortA = &H1A
PortC.4 = 1
Werte lesen
DIM x as byte
x = PinA
DIM y as bit
y = PinC.6
Details zu internem Pullup siehe „Taster“
Aufgabe 1
Damit fängt man immer an, wenn man Neuling ist, oder einen neuen Controller benutzt:
Schreibe ein Programm, welches eine oder
mehrere LEDs zum Blinken bringt.
Überlege:
Wie sind die LEDs angeschlossen? Braucht man H oder L damit sie leuchten?
Welcher Wert muss am Port ausgegeben werden, damit z.B. die dritte LED von links leuchtet? (binär -> hex, evtl. dez.)
Benutze die Befehle
$CRYSTAL =
CONFIG PortX = Output
DO LOOP
Wait
PortX = Konstante
Alle Befehle sind in der BASCOM - Hilfe erklärt.
Aufgabe 2
Sollen die LEDs etwas schneller blinken?
Versuch’s mit dem Befehl Waitms.
Aufgabe 3
Wie wär’s jetzt mit einem Lauflicht?
Wir fangen mit einer leuchtenden LED an und schieben die Bits hin und her mit ROTATE, einmal links herum und einmal rechts herum. Das ganze in einer Schleife, damit es ewig so weitergeht.
Aufgabe 4: Ansteuerung eines LCD-Displays
Das hätte eigentlich schon früher kommen
sollen, denn jeder Programmierkurs, der etwas auf sich hält, beginnt damit.
Erraten, es handelt sich um das berühmt-berüchtigte „Hello world!“ - Programm.
Versuche den Text auf dem LCD - Display auszugeben. Beachte dabei die Anschlüsse des
LCDs. Auf dem Lauth’schen Board ist die Verbindung standardmässig:
(Es wird mit nur 4 Datenbits gearbeitet)
(Beim AT90C2313 gibt es keinen PortC, hier muss PortB oder PortD benutzt und entsprechen konfiguriert werden.)
Im Programm muss das LCD mit 2 Befehlen konfiguriert werden:
Config LCD legt die Grösse fest (20 * 2)
Config Lcdpin legt die Anschlussbelegung fest
Vor dem Schreiben soll das Display mit CLS gelöscht werden. Dies bewirkt auch einen LCD-Reset.
Das Schreiben selbst erfolgt mit dem Befehl LCD
Erweiterungen:
Mit LOCATE kann der Cursor positioniert werden, so dass man z.B. auch in die 2.Zeile schreiben kann.
Aufgabe
5: Kontakt mit einem PC
Senden eines Textes
Es soll eine serielle Übertragung vom Mikrokontroller zum PC prohrammiert werden.
Die RS232 - Signale des PCs haben 12V, während der Controller mit 5V-Pegel arbeitet. Ausserdem ist die Logik invertiert.
Es muss also eine Anpass-Schaltung zwischengeschaltet werden, z.B. die klassische MAX232- Schaltung, welche in der hier abgebildeten Form ihren „Saft“ eleganterweise aus der RS232-Schnittstelle des PCs beziehen kann , wenn J1 gesetzt ist (Voraussetzung ist natürlich ein 1:1-Kabel, welches auch die Signale der Pins 4 (DTR) und 7 (RTS) führt).
Die Speisung kann aber auch vom Controller-Board aus erfolgen, wenn J2 gesetzt ist.
D1, D2 = 1N4148 D3 = ZD4v7 R1 = 100W C1C5 = 1mF |
J1 = Stromversorgung vom PC J2 = Stromversorgung von der Kontrollerplatine |
Die Verbindung nach rechts zum Mikrokontroller ist die folgende:
Pin 3 |
RxD |
PortD.0 (RxD) |
Pin 2 |
TxD |
PortD.1 (TxD) |
Die Anpass-Schaltung kann übrigens auch mit 2 Transistor-Invertern aufgebaut werden. An RxD des PCs (Pin 2) genügt meist schon ein 5V-Pegel, so dass die Schaltung nur 5V Betriebsspannung braucht. Am sichersten ist aber immer noch der MAX232.
Benutze für das Testprogramm die Befehle:
BAUD =
PRINT ..
(Am besten Text in einer Endlosschleife ausgeben mit Verzögerung, dies ist günstig wenn das Signal mit dem Oszilloskop beobachtet werden soll).
Als Terminal kann das in BASCOM eingebaute benutzt werden.
Achtung!
Die Baudraten und sonstigen
Parameter der Schnittstellen von PC und Controller
müssen natürlich übereinstimmen!
Aufgabe 6: Senden eines Variableninhaltes
Statt eines langweiligen konstanten Textes soll der Controller den Inhalt einer jede 200ms inkrementierten Variablen übermitteln (dezimal und hexadezimal).
Befehle:
PRINT X; ‘X = Zählvariable (vorher dimensionieren)
PRINT HEX(X)
Welchen Unterschied macht es, ob hinter dem PRINT ein „;“ angefügt ist oder nicht?
Aufgabe 7: Empfang eines Textes vom PC
Der Mikrokontroller soll den Bediener am anderen Ende der Leitung auffordern, seinen Namen einzugeben. Anschliessend soll der Mikrokontroller antworten mit „Hallo Name“
Befehl:
INPUT
Beachte, dass zuerst eine Variable zum Aufnehmen des empfangenen Textes dimensioniert werden muss, z.B. mit DIM S as STRING * 10 (max. 10 Zeichen lang)
Erweiterung:
Der Controller soll zusätzlich nach dem Alter fragen und dies ebenfalls ausgeben.
(Welcher Variablentyp eignet sich für das
Alter? Informiere dich über die unterschiedlichen Variablentypen!)
Damit die Anzeige im Terminal übersichtlicher wird, soll am Ende jeweils eine Leerzeile ausgegeben werden.
Aufgabe 8: Eingabe über Taster
Ein Portpin soll abgefragt und das Ergebnis mit den LEDs eines anderen Ports angezeigt werden.
Achtung: ein Eingang wird mit PinX.Y, nicht mit PortX.Y gelesen!
Achtung: bei der Funktion als Eingang kann der Pin mit oder ohne internen Pullup-Widerstand betrieben werden!
Portfunktion in Abhängigkeit von Data Direction Register (Config PortX = Input/Output) und gesetztem Wert (PortX = 1/0):
Config = (DDRx) |
PortX = |
Pullup | |
Input |
Nein |
Hochohmiger Eingang |
|
Input |
Ja |
Eingang mit Pullup - Widerstand |
|
Output |
Nein |
Ausgang mit log. 0 |
|
Output |
Nein |
Ausgang mit log. 1 |
Taster nach +5V:
In diesem Fall muss ein Pulldown-Widerstand von z.B. 10kW verwendet werden, da sonst der Eingang bei nicht gedrücktem Taster offen liegt. (Die 3 Taster ENTER des Lauth’schen Boardes sind schon so beschaltet).
Taster nach GND
Dies ist oft praktischer (und daher in der mC-Technik verbreitet), da man keine +5V auf die Taster führen muss, ein Masseanschluss ist sowieso immer irgendwo zu finden. Ausserdem kann ein AVR einen internen Pullup- Widerstand zur Verfügung stellen, so dass kein externer nötig ist.
|
Die gezeichnete Konfiguration des Tasters
arbeitet mit einem programmierten internen Pullup-Widerstand. Um diesen einzuschalten muss der Portpin als Input konfiguriert und auf log. 1 gesetzt werden: CONFIG PinD.0 as INPUT PortD.0 = 1 Gelesen wird der Pin als PinD.0 |
Achtung:
Bei
Eingängen mit Schalter gegen Masse:
Es dürfen keine LEDs parallel zu den
Eingängen liegen (wie bei der älteren Version des Lauth’schen des Testboards),
denn diese ziehen das Potential zu stark herunter (auf 2V), so dass es für H
nicht mehr reicht!
Erweiterung:
Ein Portpin soll abgefragt und das Ergebnis mit LEDs, auf dem LCD-Display und an einen angeschlossenen PC über die RS232-Schnittstelle übermittelt werden.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 775
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved