Um dem neuen Prozessor einen
guten Start zu verschaffen, hat ATMEL
im Internet einiges an Software ver-
fügbar gemacht. Da ist zum Beispiel
ein kompletter Assembler (für DOS
wie auch für WINDOWS) und ein
Simulator. Auch die kompletten
Datenblätter und Dokumentationen
der Software sind dort verfügbar. Wer
sich also vorab schon ohne Hard-
ware mit dem Prozessor beschäftigen
will: Unter www.atmel.com findet man
X-2 - 10/98 Elektor
EXTRA
———————————————————— PC-P
LUS
Seit einiger Zeit ist von ATMEL ein 8-bit-RISC-Prozessor erhältlich, der AT90S1200.
Was die Geschwindigkeit angeht, liegt dieser Prozessor ganz weit vorne. Auch
beim Preis liegt der Prozessor gut im Rennen, für den Hobbyisten kostet er schon
weniger als 10,- DM. Gelingt es einem also, mit so einem Prozessor ein paar
Logik-ICs (samt Fassungen etc) zu ersetzen, ist das bereits eine interessante
Alternative. Erst recht interessant ist der Prozessor dadurch, daß er zum
Programmieren über eine serielle Schnittstelle verfügt, so daß man um den Kauf
eines speziellen Programmiergerätes herumkommt. Wie der Prozessor konzipiert ist,
war schon in Elektor 1/98 zu lesen. Was man mit diesem Prozessor so anstellen
kann, zeigt der folgende Artikel. Die notwendige Hard- und Software ist einfach zu
beschaffen, so daß es keinen Grund mehr gibt, sich nicht mit diesem schnellen
Prozessor zu beschäftigen.
Von Dr.-Ing. Mar tin Ohsmann
Geschwindigkeit ist
keine Hexerei
Experimente mit dem ATMEL-AVR RISC Prozessor
alles notwendige, nämlich:
- Assembler für die ATMEL-AVR-Serie
- Simulator für die AVR-Serie
- Beispielprogramme:
einfache Arithmetik
EEPROM Benutzung
Experimentierboard
Von Atmel gibt es auch ein Demoboard
und die zugehörige Software, natürlich
ist das dann nicht mehr kostenlos. Da
ELEKTOR aber nun eine Zeitschrift ist, die
sich auch an den lötenden Elektroniker
wendet, haben wir natürlich eine eige-
nes kleines Experimentierboard ent-
wickelt. Der Schaltplan ist in Bild 1 zu
sehen. Eigentlich besteht die Schaltung
nur aus einem 6fach-Schmitt-Trigger,
der die Signale der seriellen PC-RS232
Schnittstelle an die serielle Schnittstelle
(nicht RS232 und nicht asynchron etc.)
des Prozessors anpaßt. Dann gibt es
noch einen Schalter, mit welchem man
zwischen Software-Download und Run
umschalten kann sowie dem Quarz
oder Quarzoszillator, der den Prozessor-
takt generiert. Wer Anwendungen plant
(z.B. Frequenz- oder Zeitmessung), bei
denen hohe Genauigkeit angestrebt
wird, ist mit einem Quarzoszillator
(gesockelt) gut beraten, er bestückt
den Quarz X1 und die beiden Konden-
satoren C1 und C2 nicht, sondern den
Oszillator IC1. Bei unkritischen Anwen-
dungen ist ein einfacher Quarz natür-
lich billiger und ausreichend. Als IC-Fas-
sung für den Prozessor kann man vor-
teilhaft einen Programmiersockel
einsetzen, wenn man vorhat, viele Pro-
zessoren zu programmieren. Das ist
schon alles. Man kann das ganze, weil
es so simpel ist, sogar auf einer Lochra-
sterplatte aufbauen. Schöner ist natür-
lich die Platine nach Bild 2.
Serielles Download
Damit man vom ATMEL-Assembler
erstellte Programme in den Prozessor
laden kann, ist eine Download-Software
erforderlich. Hier hat der Autor nichts
Passendes bei ATMEL selbst gefunden,
daher hat er selbst ein entsprechendes
Programm geschrieben. Dies ist auf der
Diskette, die zu diesem Projekt gehört,
enthalten (inkl. PASCAL-Quellcode), so
daß man mit dieser Diskette und der
Software aus dem WWW dann wirklich
komplett ausgestattet ist und loslegen
kann.
Beispielprogramme
Programmieren lernt man am besten
dadurch, daß man (lauffähige) Pro-
gramme selbst ausprobiert, abwandelt
und erweitert. Dabei ist es gerade bei
neuen Prozessoren oft entscheidend,
daß man Zugriff auf einen Fundus an
vorgefertigten Modulen hat, die einem
einige wichtige Aufgaben abnehmen,
wie z.B. Ausgabe von Zeichen, Hexa-
dezimalzahlen und Dezimalzahlen über
die serielle Schnittstelle, ebenso wie
auch Eingabe über die serielle Schnitt-
stelle. Auf der Projekt-Diskette sind zahl-
reiche solche Module vorhanden (siehe
Tabelle 1), so daß dem Anfänger die-
ser Ballast erspart bleibt und er sich auf
die wichtigen Aufgaben konzentrieren
kann. Hier ist nicht der Raum, alle diese
Programme im Detail zu besprechen.
Wer sich dafür interessiert, der kann sich
anhand der kommentierten Quellkodes
der Diskette im Detail informieren, die in
der Datei XAVR.DOC auch eine Über-
sicht über die Programme mit Kurzbe-
schreibungen und Anwendungshinwei-
sen enthält. Wir stellen hier nun ein
paar Ideen vor, die wir mit dem schnel-
len Prozessor realisieren können. Dabei
versuchen wir Anwendungen anzuge-
ben, bei welchen die Geschwindigkeit
wirklich entscheidend ist. Um ein Gerät
alle Sekunden ein- oder auszuschalten,
braucht man bestimmt nicht unbedingt
einen solchen Prozessor. Deshalb sucht
man solche Anwendungen hier ver-
geblich. Dafür erfährt man aber, wie
man aus 10 MHz verschiedene Taktsig-
nale erzeugen kann. Hier ist ein 8051
sicherlich überfordert, während ein
AT90S1200 noch gut mithält.
Ein Befehl alle 66ns:
Anwendungen
Der AT90S1200 kann mit einer Taktfre-
quenz bis zu 16 MHz betrieben werden.
Da die meisten (wirklich !) Befehle inner-
halb von einem Takt abgearbeitet wer-
den, kann man 16 Millionen Befehle in
PC-P
LUS
———————————————————
Elektor
EXTRA
X-3 - 10/98
NC
PD0
XTAL2
PD2(INT0)
PD4(TO)
GND
(AIN0)PB0
PB2
PB4
NC
PD1
XTAL1
PD3
PD5
PD6
(AIN1)PB1
PB3
(MOSI)PB5
(SCK)PB7
Vcc
NC
NC
K1
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1
2
3
4
5
6
7
8
9
OE
1
OUT
5
Vdd.
8
GND
4
IC1
SG531P
12.0000MHz
X1
12MHz
C2
22p
C1
22p
/RESET
T
PB7
PB6
PB5
PB4
PB3
PB2
PB1
PB0
JP1
JP2
JP3
R24
1k
R1
10k
R3
1k
R4
5k6
R7
1k
R8
1k
9
8
1
IC2d
13
12
1
IC2f
11
10
1
IC2e
R6
100k
R12
100k
R13
100k
R10
10k
R9
1k
R11
10k
K2
1
2
3
4
5
6
7
8
9
5
6
1
IC2c
3
4
1
IC2b
1
2
1
IC2a
R2
100k
R5
10k
S1
PROG/RUN
ISP/
RS232
R14
20k
R16
20k
R15
10k
R18
20k
R17
10k
R20
20k
R19
10k
R22
20k
R21
10k
R23
20k
PB0
PB4
PB3
PB2
PB1
DAC
1%
1%
1%
1%
1%
1%
1%
1%
1%
1%
PB0 PB1 PB2 PB3 PB4
K3
10
1
2
3
4
5
6
7
8
9
FC10HB
PB7
PB6
PB5
PB4
PB3
PB2
PB1
PB0
C5
100n
C7
100n
IC2
14
7
C6
100n
7805
IC3
C3
100
µ
25V
C4
10
µ
10V
R25
1k
D2
D1
1N4001
K4
9...15V
IC2 = 74HC14
980082-11
(MISO)PB6
PB6
PB5
PB7
5V
5V
5V
5V
5V
Bild 1. Schaltplan des AVR-Experimentierboards.
der Sekunde ausführen. Wenn man
also ein Programmsegment eine Million
mal in der Sekunde ausführen will, kann
es immerhin so 10 bis 16 Befehle lang
sein. Mit soviel Befehlen kann man
schon einiges anfangen. Natürlich nur
hardware-nah, wer kann sich schon ein
Windows-Programm vorstellen, das nur
einige -zig Befehle lang ist....
So ein schneller Prozessor kann also oft
eingesetzt werden, wenn eine Anzahl
an digitalen ICs eingespart werden soll
und andererseits die Geschwindigkeit
nicht so hoch ist, daß man auf teure
programmierbare Logik zurückgreifen
muß. Das Schöne an so einem Mikro-
controller ist, daß man Zugriff auf eini-
ges an Registern hat und auch rech-
nen kann. Wer schon mal versucht hat,
mit programmierbarer Logik Berech-
nungen anzustellen, weiß, was gemeint
ist. Nun aber genug der Vorrede, los
geht’s mit einer kurzen Vorstellung des
Prozessors und mit Beispielprogrammen.
AT90S1200 im Überblick
Aufgrund der RISC-Architektur ist der
Prozessor relativ einfach und über-
schaubar aufgebaut. Einen Überblick
gibt Bild 3. Der für uns wichtigste Teil ist
die Registergruppe von 30 Registern zu
8 bit. Mit diesen Registern kann man
Berechnungen anstellen und Werte in
ihnen speichern. Dann gibt es noch
zwei Ein-Ausgabe Ports (Port B und Port
D). Per Software kann man festlegen,
welche Pins Ein- und welche Ausgänge
sind. Dann kann man den Zustand von
Pins abfragen oder ändern. So kann
man mit der Außenwelt kommunizieren.
Gesteuert wird der Ablauf von einem
zentralen Oszillator, dessen Frequenz
zwischen 0 und 16 MHz liegen darf.
Natürlich gibt es dann noch Interrupt-
steuerung und einen kleinen einfachen
8-bit-Timer bzw. Zähler. Die komplette
Beschreibung das AT90S1200 ist ca. 50
Seiten lang, wer also alles genau wis-
sen will, sollte sie sich übers WWW
beschaffen. Nun aber ein paar Bei-
spielbefehle zum Eingewöhnen:
X-4 - 10/98 Elektor
EXTRA
———————————————————— PC-P
LUS
(C) ELEKTOR
980082-1
(C) ELEKTOR
980082-1
C1
C2
C3
C4
C5
C6
C7
D1
D2
H1
H2
H3
H4
IC1
IC2
IC3
JP1
JP2
JP3
K1
K2
K3
K4
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13
R14
R15
R16
R17
R18
R19
R20
R21
R22
R23
R24
R25
S1
X1
DAC
B4
B3
B2
B1
B0
T
T
T
T
980082-1
PROG
RUN
Bild 2. Die einseitige Platine des Experimentierboards.
Tabelle A
; mit einem Semikolon werden Kommentare eingeleitet
.def summe=R20 ; mit .def kann man Registern symbolische Namen geben
mov r2,r
; Der Inhalt von Register R3 wird nach R2 kopiert
ldi r17,123
; Register r17 wird mit 123 geladen
add r20,r21
; Register r20 wird summe r20+r21
adc r20,r21
; Register r20 wird summe r20+r21+carry
sbi PORTB,2
; setze Bit von PORTB nummer 2
clr r20
; Loesche (clear) r20 auf 0
brne loop
; springe wenn nicht ZERO nach loop
sbrs r20,2
; skip if bit in register set,
; ueberspringe naechsten Befehl wenn Bit 2 von R20 gesetzt
Erste Programme:
Einfache Signalmuster
Der AT90S1200 arbeitet mit Taktfrequen-
zen von 0 Hz (statische Operation) bis 16
MHz. Man kann ihn daher hervorragend
einsetzen, um ausgehend von einem
Taktsignal ein komplexes Signalmuster
zu erzeugen. Normalerweise macht
man das mit Zählerbausteinen und
Dekodern. So eine Schaltung kann
schon recht aufwendig werden, bei
komplexeren Dekodierlogiken muß man
dann noch sorgfältig arbeiten, um Glit-
ches zu vermeiden. Bei Frequenzen
unter 16 MHz kann man nun auch so
einen RISC-Prozessor einsetzen. Bei noch
niedrigeren Frequenzen kommen auch
zahlreiche andere Mikrocontroller in
Frage. Um z.B. das in Bild 4 dargestellte
Impulsmuster zu erzeugen, kann man
das Programm nach Bild 5 (XPAT-
GEN1.ASM) verwenden. Es ist schön kurz
und besteht eigentlich nur darin, die
Register r17 bis r22 mit den möglichen
Signalkombinationen zu laden. Dann
PC-P
LUS
———————————————————
Elektor
EXTRA
X-5 - 10/98
Stückliste
Widerstände:
R1,R5,R10,R11 = 10 k
R2,R6,R12,R13 = 100 k
R3,R7...R9,R24,R25 = 1 k
R4 = 5k6
R14,R16,R18,R20,R22,R23 = 20 k 1%
R15,R17,R19,R21 = 10 k 1%
Kondensatoren:
C1,C2 = 22 p ker * siehe Text
C3 = 100
µ/25 V stehend
C4 = 10
µ/10 V stehend
C5...C7 = 100 n keramisch
Halbleiter:
D1 = 1N4001
D2 = LED rot (high efficiency)
IC1 = SG531P12.0000MHz EPSON
(Texim) * siehe Text
IC2 = 74HC14
IC3 = 7805
Außerdem:
X1 = 12 MHz * siehe Text
K1 = 24-polige Aries 0,3-0,6” (Farnell)
JP1...JP3 = 2-polige JUMPER
S1 = Schiebeschalter 1 x Um für
Platinenmontage
K2 = 9-polige SUB-D-Buchse
K3 = 2
⋅5poliger Pfostenverbinder
(optional)
K4 = Netzteil-Anschlußbuchse
(Niedervolt-Buchse) für Platinenmontage
Platine 980082-1
Programmdiskette 986020-1 (siehe
Serviceseiten in der Heftmitte)
1
2
3
4
5
6
7
8
9
10
17
18
19
20
21
B0
B1
B2
980082-13
Bild 4. Aufgrund der hohen Arbeitsgeschwindigkeit kann der AVR-Controller auch komple-
xere Impulsmuster mit Frequenzen bis über 10 MHz erzeugen.
Bild 3. Das Blockschaltbild gibt einen Überblick über die inneren Werte des RISC-
Controllers.
werden die Werte mit maximaler
Geschwindigkeit in der Schleife (begin-
nend bei Label LOOP:) an den Port B
ausgegeben. Dieses Programm kann
man nun vielfältig abwandeln. Durch
den Einbau von Warteschleifen kann
man z.B. Signalformen mit sehr langen
Periodendauern realisieren, die mit
Quarzgenauigkeit bzw. taktsynchron
ablaufen. So stellt es kein Problem dar,
das Programm so zu modifizieren, daß
die Signalform in den ersten 6 Taktzyklen
gleichbleibt, es dann aber 428376233
Zyklen dauert, bis das Spielchen von
vorne losgeht. Dazu braucht man
gerade mal einen Zähler, der die not-
wendige Zahl von Zyklen zählen kann.
Dazu reichen 32 bit, d.h. 4 Register des
Prozessors mit ein paar Additionsbefeh-
len tun diesen Job. Zudem braucht man
nicht umzulöten, wenn sich die Zahl der
Zyklen ändert. Man muß nur ein paar
Konstanten im Programm ändern, und
weiter geht’s. Dies ist eine Flexibilität, die
man mit klassischer verdrahteter Logik
nicht hat, und für die man in program-
mierbarer Logik oft einiges an Geld
bezahlen muß (insbesondere für Ent-
wicklungstools). In der Softwaresamm-
lung auf der Diskette befindet sich übri-
gens ein Beispiel eines einfachen Pat-
tern-Generators, wobei die Muster noch
durch eine serielle Schnittstelle einge-
stellt werden (über XPATGEN2.EXE und
XPATGEN2.PAT).
980082-1
Im zweiten und letzten Teil geht es weiter mit
Programmbeispielen, wie Frequenzteiler,
numerisch gesteuertem Oszillator (NCO),
Zeitmessung und Frequenzmessung.
X-6 - 10/98 Elektor
EXTRA
———————————————————— PC-P
LUS
Tabelle 1. Inhaltsübersicht der
Programmdiskette
Bild 5. Dieses kleine und übersichtliche
Programm erzeugt das in Bild 4 gezeigte
Impulssignal.
Tabelle 1.
PC Programme
SER90
Download von Programmen ans Experimentierboard
(PASCAL-Quelltext ist auch auf der Diskette)
V24COM
V24 serielles Kommunikationsprogramm
(PASCAL-Quelltext ist auch auf der Diskette)
AVRASM.EXE
AVR-Assembler (DOS-Version)
AT90S1200 Beispielprogramme
Name
Aufgabe
XSEROUT1
Ausgabe eines Zeichens via RS232, 9600 Bit/sek
XHEXOUT1
Ausgabe von Registern, hexadezimal via RS232
XHEXOUT2
Ausgabe aller 32 Register (Dump) via RS232
XDECOUT1
Ausgabe von 24-Bit Werten (0..16777215)
Dezimal via RS232
XSERIN1
Einlesen eines Zeichens via RS232 9600 Bit/sek
XFMES1
Frequenzmessung bis 5 MHz, 1 Sek. Messzeit,
RS232 Ausgabe dezimal mit 9600 Bit/Sek
XTMES1
Zeitmessung 1 ms bis 8 Sekunden 0,5 ms Aufloesung
Ausgabe via RS232, 9600 Bit/Sek
XNCO1
numerisch gesteuerter Oszillator
77,5 KHz Ausgang mit 12-MHz-Quarz
XNCO2
numerisch gesteuerter Saegezahnoszillator,
programmierbar via RS232
XFRQDIV1
Frequenzteiler durch N, N via RS232 programmierbar
XPATGEN1
Einfacher 8 Kanal Pattern-Generator
XPATGEN2
Einfacher 8 Kanal Pattern-Generator
via RS232 einstellbares Muster
XDIV625
Teiler durch 625, nicht ueberlappende Pulse
ldi r16,$0FF ; set output B to totem-pole
out DDRB,r16
ldi r17,0b0001 ; set patterns into registers
ldi r18,0b0010
ldi r19,0b0100
ldi r20,0b0110
ldi r21,0b0010
ldi r22,0b0000
LOOP: out PORTB,r17 ; output each register to PORT
out PORTB,r18
out PORTB,r19
out PORTB,r20
out PORTB,r21
out PORTB,r22
nop ; two extra cycles
nop
rjmp LOOP ; this takes also 2 cycles