|
|
Die hier vorgestellte Mikroprozessorplatine cpuBoard4051 weist den klassischen Aufbau einer Mini-EDV-Anlage auf: Komponenten für die Eingabe, Verarbeitung und Ausgabe unterschiedlichster Information stehen zur Verfügung. Mit LCD, PC-Interface, zwei Tastern und einigen A/D-D/A-Wandlern ist diese Mehrzweck-Prozessorplatine, die auf einer halben Europakarte Platz findet, für vielerlei Aufgaben bestens gerüstet.
Das cpuBoard4051 kann der Grundstock für eine Transceiver/PA-Ablaufsteuerung, einer Morsemaschine, Wetterstation oder die Basisplatine für völlig andere Aufgaben im Amateurfunk sein. Auch zum Lernen und Programmierer ist die Schaltung aufgrund der zahlreichen Schnittstellen ideal. Neben dem intelligenten Herzstück, einem Atmel-Prozessor AT89C2051 oder AT89C4051 mit wahlweise 2 oder 4 KByte Flash, integrierter seriellen Schnittstelle (UART), Zeitgeber (Timer) und digitalen I/O-Ports stehen für Experimente als externe Schnittstellen eine LC-Anzeige, zwei Eingabetaster, ein serielles Interface zum PC, vier unabhängige 8-Bit A/D-Wandler, ein D/A-Wandler sowie acht externe, programmierbare Ports für die Ein- oder Ausgabe digitaler Daten zur freien Verfügung. Letztere kann man zum Steuern von Relais, für beliebige Ein/Aus-Funktionen oder zur parallelen Datenübertragung nutzen. Damit die Programmierung simpel und die Zahl der Leiterbahnen auf der Platine nicht zu umfangreich werden, hat sich der Autor dazu entschlossen, maßgebliche IC über den Philips I2C-Bus zu steuern. Dieser für die Konsumelektronik entwickelte Zweidrahtbus ermöglicht die Ausführung des cpuBoard4051 auf einer einseitigen kupferkaschierten Platine mit lediglich neun Drahtbrücken. Das vereinfacht den Nachbau erheblich.
Für die Kommunikation mit der Außenwelt sind drei Schnittstellen vorgesehen. Zur manuellen Bedienung dienen zwei Taster, etwa um ein Menü zu steuern und Betriebsparameter einzustellen. Der Anwender kann den Tastern jedoch völlig andere Funktionen zuweisen, sofern es die Anwendung erfordert. Die serielle Schnittstelle, realisiert in der klassischen Variante mit dem IC MAX232, ermöglicht den Kontakt zu einem PC oder jedem beliebigen Gerät, dass mit einer RS232-Schnittstelle ausgestattet ist. Für die Verbindung zum PC ist ein handelsübliches 9-poliges RS232-Verlängerungskabel einzusetzen. Über die serielle RS232-Schnittstelle ist es beispielsweise mit wenig Programmieraufwand möglich, von den A/D-Wandlern empfangene Daten an einen PC zu reichen, der diese verarbeitet, speichert oder grafisch aufbereitet (zum Beispiel mit Excel). So könnte die Prozessorplatine als intelligentes Frontend fast beliebiger Sensoren dienen. Zur direkten Kommunikation mit dem Anwender dient die Schnittstelle zum LC-Display. Hier kommt ein intelligentes, handelsübliches LC-Display mit HD44780-Prozessor (oder kompatibel) zum Einsatz.
cpuBoard4051: Der Schaltplan. Etwas groß geraten, aber kleiner gings nicht, ohne Verluste der Lesbarkeit!

Die Programmierung des LC-Display geschieht im 4-Bit-Modus. Das erspart einige Pins am Prozessor, da nicht acht, sondern nur vier Datenbits zur Steuerung verwendet werden. Über die einreihige 14-polige Leiste kann man das LCD (z. B. von Reichelt) direkt auf die Platine aufstecken. Das Poti in der Nähe des LCD-Verbinders dient zur Einstellung des Anzeigekontrastes. Steht kein 4k7 oder 5k-Poti zur Verfügung, tut es auch ein 10k oder 25k-Poti, letztlich steuert die angelegte Spannung den Kontrast der Anzeige. Die benötigte 5-Volt Spannungsversorgung wird wie üblich über den Regler 7805 bereit gestellt. Die Platine kann wahlweise komplett oder nur für die benötigten Funktionen bestückt werden. Nicht benötigte Komponenten, etwa das LC-Display oder den A/D-D/A-Wandler, können ersatzlos entfallen. Der 4-polige Expansionsport SL1 erlaubt die Versorgung einer Erweiterungsplatine mit den Signalen des I2C-Busses sowie der Spannungsversorgung. In dieser Hinsicht ist das cpuBoard4051 für die Zukunft gerüstet. Soweit die Betrachtung des Schaltplanes.
| Steckerbelegung SV2: Analoge Eingänge/Ausg | |
|---|---|
| AIN0 | GND |
| AIN1 | GND |
| AIN2 | GND |
| AIN3 | GND |
| AOUT | GND |
| Steckerbelegung SV1: Digitale Ein-/Ausgänge Eingänge | |
|---|---|
| +5Volt | GND |
| P0 | P1 |
| P2 | P3 |
| P4 | P5 |
| P6 | P7 |
Die einseitige Platine ist recht eng mit Leiterbahnen belegt und benötigt eine saubere Lötarbeit, damit Kurzschlüsse und andere unerfreuliche Überraschungen nicht zu zeitintensiver Fehlersuche führen. Die Bestückung beginnt daher mit neun Drahtbrücken. Man verwendet 0,6 mm Silberdraht und schmiegt sie eng an die Platine an, damit Platz für folgende IC-Sockel verbleibt. Dann löten Sie Widerstände und Kondensatoren, IC-Sockel ein. Statt der 4,7 uF-Kondensatoren am MAX232 und in der Resetschaltung können Sie auch 10 uF verwenden. Die Bestückung sieht einen etwas groß geratenen Gleichrichter vor, aber mit etwas "tricksen" paßt auch eine kleinere 1A-Variante in die Bohrungen. Wer sich den Gleichrichter erspart und durch zwei Drahtbrücken ersetzt, muss später beim Anlegen der Spannungsversorgung genau auf die Polung achten, da kein weiterer Verpolungsschutz besteht! Vor dem Einsetzen der Taster ist deren Pinbelegung zu prüfen. Bevor Sie (ohne IC!) Spannung an die Platine anlegen und an den IC-Sockeln die Versorgungsspannung prüfen, ist die gelötete Platine mit einer Lupe auf Kurzschlüsse zu prüfen. Da sie nun fertig bestückt vor uns liegt, kommen wir zur Software, denn keine Hardware, kein Prozessor hat Wert ohne den Hauch des Lebens - in der Elektronik sind das Bits und Bytes.
|
Einseitiges Layout auf einer halben Europakarte (100 x 80 mm) |
| Bestückungsplan | ![]() |
Steigen wir in die Programmierung ein und befassen uns mit dem I2C-Bus. Es benutzt die Signale SDA (Serial Data) und SCL (Serial Clock). SDA transportiert die seriellen Informationen im Takt der SCL-Leitung. Doch welche Informatioen befördert der I2C-Bus? Es handelt sich um Adressen, die bestimmte IC aktivieren sowie um Informationsbytes, die beispielsweise den digitalen Port mit einem Wert belegen oder Daten von einem Digital-Analogwandler. Da auf einem Datenbus kaum ein vernünftiges Miteinander vieler Parteien möglich ist, ohne dass ein Kommandant die Befehlsgewalt ausübt, gibt es in jedem I2C-Bus ein sogenannter Master und mehrere Slave (Sklaven). Sowohl der Master als auch die Slaves dürfen hören und senden, letztere jedoch nur auf Anforderung des Masters. Das ist in unserem kleinen Bussystem der Microcontroller. Ihm gehorchen zwei Slaves: Ein Sklave, das IC PCF8591, bietet vier analoge Eingänge und einen analogen Ausgang (A/D-D/A-Wandler). Der zweite Slave, ein PCF8574(A) bietet nicht mehr oder weniger als 8 digitale Ein- und Ausgänge.
Jeder Slave besitzt eine eigene Adresse (oder besser gesagt zwei, je eine für Lese- und Schreibzugriffe, wie wir später sehen werden). Über diese Adresse wird das IC aktiviert, und die Bedeutung der darauf folgenden Bytes sind abhängig vom verwendeten Schaltkreis. Bei der Beschreibung der IC gehen wir näher darauf ein.
Möchte der Master mit einem seiner Schäfchen kommunizieren, so gibt er zuerst ein Startsignal (S) auf den Bus. Sofort gehen alle Slave-IC in die "Achtung"-Position und lauschen auf dem Bus, denn nun sendet der Master die Adresse (je nach Anwendung die Schreib- oder Leseadresse) des betreffenden Slave, den er zu "sprechen" wünscht. Die anderen IC, die nicht angesprochen wurden, legen sich danach wieder "schlafen". Der Slave, dessen Adresse über den Bus gerauscht kam, bestätigt sie mit einem Acknowledge-Bit (A). Nun weiß der Master, dass das IC bereit und willens ist, weiteren Befehlen zu gehorchen, die Verbindung "steht". Die Bedeutung des nächsten Bytes des Masters ist bereits vom jeweiligen Slave abhängig. Beispielsweise könnte der Master ein Kontrollbyte senden, dass den Slave in seiner Funktion konfiguriert. Es könnte auch ein Byte sein, dass ein I/O-Port steuert, um irgendwelche Geräte ein- oder auszuschalten. Wie dem auch sei, der Slave wird dieses empfangene Byte mit Acknowledge (A) bestätigen. Ist der Master mit seiner Sendung fertig, beendet er diese mit einem Stoppsignal (P). Danach ist der Bus frei für die Kommunikation mit anderen Slaves.
![]() |
Der kleine I2C-Bus auf dem Prozessorboard |
Fordert der Master Daten von einem Slave an, beispielsweise von einem Port oder einem A/D-Wandler, so beginnt es wie gehabt mit dem Start-Signal und darauf folgt die Leseadresse (!) des betreffenden Slave. Der Slave bestätigt seine eigene Adresse wie zuvor geschildert mit A. Danach jedoch wird der Slave zum Sender - schließlich muß er dem Verlangen des Masters nachkommen und seinen Job tun -- und schickt dem Master die geforderten Informationen. Der Master wird jedes empfangene Byte mit A bestätigen. Das sagt dem Slave, dass die Information angekommen ist und dass weitere Daten gewünscht werden. Bleibt das A des Masters aus, stellt der Slave seine Sendung ein und übergibt dem Master die Buskontrolle.
Das Beispiel zeigt, dass der Master auf dem I2C-Bus jeweils die Initiative ergreift. Es kommt nicht vor, dass ein Slave ohne Aufforderung aktiv wird.
| Pinbelegung ded A/D-D/A-Wandlers | |
Das IC PCF8591 enthält vier A/D-Wandler mit 8 Bit Breite und einen Digital/Analog-Wandler. (Man kann den Baustein so betrachten, doch stimmt das nur bedingt, denn in der Realität ist es ein einziger A/D-Wandler mit vorgeschaltetem 4-fach-Multiplexer.) Die Adressleitungen A0 bis A2 gestatten acht PCF8591 an einem I2C-Bus, im Schaltbild sind alle drei Adreßleitungen mit Masse verbunden. Die Adresse, unter der das IC über den I2C-Bus angesprochen wird, setzt sich aus dem festen Adressteil mit den oberen Bits "1001" und den programmierbaren Adressleitungen A2 bis A0 sowie dem Read- bzw. Write-Bit zusammen:
|
Das Addressbyte des Wandler-IC PCF8591 |
Wie Sie aus der Abbildung erkennen, differiert die Lese- und Schreibadresse des IC um einen Wert von 1. Mit den Adresspins A2 bis A0 auf Masse (=Low) ergibt sich eine Schreibadresse von 10010000 (entspricht 144 dezimal oder 90 hex) und eine Leseadresse von 10010001 (entspricht 145 dezimal oder 91 hex). Nach dem Adressbyte folgt als zweites Byte das Kontrollbyte. Es dient zur Konfiguration der Wandler. Darin ist Bit 7 immer Null, Bit 6 aktiviert (1) oder deaktiviert (0) den analogen Ausgang. Bit 5 und 4 definieren die Art der Analog- zu Digitalwandlung. Setzt man beide Bits auf Null, stehen vier Eingänge mit den positiven Eingangsspannungen von 0..5 Volt zur Verfügung. Benötigt man einen Wandler, der auch negative Spannungen verarbeitet, setzt man Bit 5 und 4 auf High (1). Damit hat man zwei differentielle Analogeingänge. Näheres entnehmen Sie bitte dem Datenblatt.
Bit 3 des Kontrollbytes ist immer Null, Bit 2 definiert das Autoincrement-Flag. Dazu ein Szenario: Stellen Sie sich vor, Sie wollten die vier analogen Eingangskanäle 0..3 zyklisch auslesen. Dazu müssten Sie für jeden Lesevorgang aufwändig programmieren, welcher Kanal des A/D-Wandlers an die Reihe kommt. Das ist recht umständlich und zeitraubend. Mit Hilfe des Autoincrement-Flag, das Sie im Kontrollregister aktivieren, wird der Kanal nach Auslesen eines Analogeinganges automatisch um 1 erhöht: Nachdem Sie Kanal 2 ausgelesen haben, sorgt das IC selbsttätig dafür, dass Kanal 3 folgt, anschließend geht es wieder bei Kanal 0 los. Der große Vorteil: Sie können im Lesemodus bleiben und ersparen sich einige Programmierarbeit.
Bit 1 und Bit 0 des Kontrollbytes bestimmen den abzufragenden A/D-Wandler. Beide Bits auf Null bedeutet: Kanal 0 wird als nächstes ausgelesen, "11" wählt Analogeingang 3.
Null) gesandt wird, "landet" im DAC-Register und wird in eine analoge Spannung umgesetzt. Der Wert 255 ergibt am analogen Ausgang des IC nahezu 5 Volt, schreiben Sie den Wert Null in das DAC-Register, ergeben sich am Ausgang Null Volt.
Dem Lesen der Analogeingänge geht die Einstellung des Kontrollregisters voraus. Nutzt man das Autoincrement-Flag, ist es sehr einfach, da man permanent im Lesemodus verbleiben kann. Nehmen wir an, das Kontrollregister wurde so programmiert, dass vier Analogeingänge von 0..5 Volt zur Verfügung stehen, das Autoincrement-Flag gesetzt ist und der Kanal Null vorgegeben ist. Das Busprotokoll spielt sich dann so ab:
| Lesen der analogen Eingänge des PCF8591 | |
Nachdem der I2C-Busmaster (also der Prozessor) einen Startbefehl und eine gültige Adresse (mit dem R/W-Bit = 1) auf den Bus gelegt hat, bestätigt das IC PCF8951 mit dem Acknowledge-Bit. Damit weiß der Master, dass der Befehl "angekommen" ist. Von nun an sendet der Wandler Datenbytes der verschiedenen analogen Eingänge, die der Master jeweils mit einem Acknowledge bestätigt. Sind genug Daten gelesen, stoppt er den Transfer ohne Acknowledge und setzt den Stopp-Befehl. Auf diese Weise können Sie eine beliebige Anzahl Analogeingänge der Reihe nach abfragen. Eine Kleinigkeit muß man jedoch beachten: Der erste gelesene Wert vom Wandler stammt von einer zuvor ausgeführten Wandlung, der Wert ist also nicht aktuell. Ist es gar die erste Wandlung nach dem Einschalten des IC, liefert diese immer den Wert 128 (80 hex). Erst die zweite Abfrage ergibt einen aktuellen Spannungswert. Diese Besonderheit ist in eigenen Programmen zu berücksichtigen.
Bei dem PCF8574(A) handelt es sich um einen 8-Bit Port, der bitweise oder insgesamt als digitaler Eingang oder Ausgang fungieren kann. In der Betriebsart als Ausgang ist er in der Lage, eine Leuchtdiode direkt zu steuern. Das CMOS-IC arbeitet bei einer Spannungsversorgung von 2,5 bis 6 Volt und benötigt im Standby-Modus nur 10uA. Bei der Adressierung des IC über den I2C-Bus ist zu beachten, dass ein PCF8574 eine andere Adresse als ein PCF8574A aufweist. Da jedes PCF8574 drei Adressleitungen A0 bis A2 besitzt, können maximal acht IC an einem Bus betrieben werden. Vermutlich reichte das für größere Anwendungen nicht aus, daher wurde das in der Funktion gleiche PCF8574A geschaffen, dass sich lediglich in der festgelegten Adresse unterscheidet.
|
Adresse des PCF8574 mit Start, R/*W-Bit und Acknowledge |
| Die Adresse des PCF8574A differiert vom PCF8574 deutlich | |
Im Schreibmodus legt man eine gültige Adresse auf den Bus, gefolgt von den auszugebenden Daten, die das IC prompt auf die Ausgänge schaltet. Um vom Ausgabe- in den Eingabemodus zu wechseln, sendet man für die Bits, die als Eingabe fungieren sollen, eine "1" an das IC. Um etwa alle 8 Bits als Eingang zu programmieren, setzt man diese mit dem Wert 255 auf High-Level. Anschließend folgen die Lesebefehle.
Die Hardware ist recht schnell gelötet, eben soviel Spaß bereitet das Schreiben der eigenen Software. Dies kann etwas aufwändig in Assembler geschehen:
Main: MOV I2C_CMAX,#0h ; setze maximale Timeout-Zeit für I2C
mov I2C_ADR,#01110000b ; Adr. 8574A Exp.Port
; Bit 0 = Low (Write), High (Read)
ACALL I2CSTOP ; führe I2C-Stopp-Bedingung aus
ACALL MaxWait ; warte vor Start
loop_x:
; Ausgabe eines Wertes auf 8574A-Port
mov A,#0 ; Byte zur Ausgabe
MOV B,I2C_ADR ; Chip-Adresse
ACALL I2C_Out
; noch eine Ausgabe auf 8574A-Port
mov A,#255 ; Byte zur Ausgabe
MOV B,I2C_ADR ; Chip-Adresse
ACALL I2C_Out
Acall Maxwait ; etwas warten
Jmp loop_x
Dieses kleine Programm läßt eine am 8574A-Port angeschlossenen LED blinken. Man sieht, dass Assembler nicht umständlich oder schwierig sein muß. Allerdings stützen sich diese wenigen Zeilen auf einige Unterroutinen von Sebastian Furchtbar, die er im Internet zur Verfügung stellt. Sie übernehmen das komplette I2C-Handling. Ich bin der Auffassung, das Rad nicht neu erfinden zu müssen und nutze diese Routinen gern. Damit ist man als Assemblerprogrammierer in (fast) der glücklichen Situation wie der Anwender des 8051-Basic-Compilers [1]. Der Basic-Code sieht ähnlich kompakt aus, nachfolgend ein komplettes Programm:
'PCF8574A Demo-Program for I/O, by dg5dbz $regfile = "89C2051.DAT" $crystal = 11059200 '11.059 MHz Quarz $baud = 1200 ' 1200 Baud zum PC Config Scl = P3.7 'hier ist SCL angeschlossen Config Sda = P3.5 'und hier SDA Dim Wadr As Byte Dim Radr As Byte ' Variablen Dim Dat As Byte Wadr = &B01110000 ' Schreibadresse füt 8574A Radr = &B01110001 ' Leseadresse Print " Vorbereiten für Lesemodus: " 'Ausgabe über RS232 Print " 255 schaltet Ports auf Eingabe" I2cstart I2cwbyte Wadr 'Schreibadresse senden I2cwbyte 255 'Alle Ports auf high I2cwbyte 0 ' und zum Spass low I2cwbyte 255 ' und wieder high I2cstop 'Stopp Wait 1 ' 1 Sek. Pause While Wadr > 1 ' Schleife bis 0 Volt Print 'Leerzeile Print " Abfrage der Ports des 8574A " 'Meldung I2cstart 'Start I2cwbyte Radr 'Adresse senden I2crbyte Dat , 9 'Datenbyte lesen, ohne ACK I2cstop 'Stopp Print " Es wurde empfangen: " ; Dat ; " "; 'Ergebnis ausgeben Printhex Dat ' und noch einmal in hex Print Wait 1 Wend ‚ Ende der Schleife End ‚ Ende des Basic-Programmes
Routinen wie I2CStart, Print, Printhex oder andere stellt der Basic-Compiler bereits fix und fertig zur Verfügung. Die Einstellung des I2C-Datenstroms und die Zuordnung der I2C-Signale zu den Prozessorpins geschieht über den CONFIG-Befehl. Das DIM-Kommando definiert einige Variablen, zum Beispiel die Schreib- und Leseadresse des IC. Der Rest des Basic-Programmes ist weitgehend selbsterklärend, wenn man weiss, dass der Print-Befehl mit der seriellen Schnittstelle (Port zum PC) arbeitet. Lassen Sie dieses Programm ablaufen, verbinden Sie das CPU-Boad über ein 9-poliges RS232 Verbindungskabel mit dem PC und starten z. B. unter Windows Hyperlink oder ein anderes Terminalprogramm. Stellen Sie es auf 1200 Baud ein. Ist alles soweit vorbereitet und die 8574A-Demo läuft auf dem cpuBoard4051, schließen Sie einen Port des 8574A mit einem Stück Draht nach Masse kurz. Der vom Port gelesene Wert wird sich verringern. Sollte das nicht der Fall sein, haben Sie eventuell statt des PCF8574A ein PCF8574 eingesetzt. Dann ändern Sie bitte die Lese- und Schreibadresse.
... soll gleichfalls als Basic-Programm vorgestellt werden. Anfangs ähnelt es dem vorherigen Programm, doch bereits die Lese- und Schreibadressen sind dem PCF8591 angepasst. Eine neue Variable COUNT ist hinzugekommen, die als Zähler in der Leseschleife verwendet wird.
'PCF8591 Demo-Program for A/D-D/A, by dg5dbz
$regfile = "89C2051.DAT"
$crystal = 11059200 '11.059 MHz Quarz
$baud = 1200 ' 1200 Baud zum PC
Config Scl = P3.7 'hier ist SCL angeschlossen
Config Sda = P3.5 'und hier SDA
Dim Wadr As Byte
Dim Radr As Byte ' Variablen
Dim Dat As Byte
Dim Count As Byte
Wadr = &B10010000 ' Schreibadresse füt 8591
Radr = &B10010001 ' Leseadresse
Print 'leere Zeile
Print
Print " Vorbereitung für Lesemodus " 'Ausgabe über RS232
I2cstart
I2cwbyte Wadr 'Schreibadresse senden
I2cwbyte &B01000100 ' Kontrollbyte:
' Analog Out enable
' 4 Kanäle, 0..5V
' Autoincrement Flag an
' Kanal Null selektiert
I2cwbyte 0 ' Null auf D/A-Wandler
I2cstop ' Stopp
' Jetzt Wandler lesen (in einer Schleife)
While Wadr > 0
I2cstart ' Start
I2cwbyte Radr ' Leseadresse übermitteln
For Count = 0 To 2
I2crbyte Dat , 8 ' Lesen mit ACK
Print " Kanal " ; Count ; " Wert = " ; Dat
Next
I2crbyte Dat , 9 ' Lesen ohne ACK
Print " Kanal 3 Wert = " ; Dat
I2cstop
Print
Wend
End
In der Vorbereitungsphase wird das PCF8591 mit dem Kontrollbyte programmiert. Damit wird das Autoincrement-Flag eingeschaltet, vier Kanäle aktiviert und das IC so programmiert, dass als nächstes Kanal Null abgefragt wird. Dann folgt mit dem neuen Startbefehl die Leseschleife. Nach Übermittlung der Leseadresse werden die Datenbytes empfangen. A(cknowledge) ist dabei eingeschaltet. Die letzte Abfrage, bereits außerhalb der FOR-Schleife gelegen, bezieht sich auf Kanal 3 und wird nicht mit A bestätigt. Dies geschieht über den Befehl I2crbyte Dat,9. Damit stellt das IC seine Aussendung ein und der Master sendet das Stoppsignal.
Mit diesen Beispielroutinen ist es recht einfach, eigene Programme zu entwerfen oder beide Demos zu einem Programm zu kombinieren. Ob Assembler oder Basic spielt dabei keine Rolle. Auf der Heft-CD finden Sie beides: den Assembler in \etronik\embed\asem51 und zwei Demo-Versionen des Basic-Compilers in \etronik\embedded\. Letztere verhalten sich bis zu einer Programmgröße von 1 KByte Binärcode wie eine Vollversion, lediglich bei größeren Programmen stoppt der Compiler. Die Basic-Programme und einige Assemblerprogramme stehen auf der Heft-CD im Verzeichnis \testdaten\cpuboard. Sie wurden mit der Bascom-8051-Vollversion 1.0.0.16 erstellt.
So, nun haben Sie viel über den Atmel 2051/4051 gelesen und vielleicht auch schon etwas programmiert. Doch im Titel ist auch der Atmel AVR AT90S2313 als möglicher Prozessor genannt. Dieser Prozessor der neueren AVR-Reihe (ebenfalls von Atmel) besticht durch eine hohe Verarbeitungsgeschwindigkeit, einem RISC-Kern und zahlreichen Leistungsmerkmalen wie zwei Timer, einem Full-Duplex-UART, integriertem EEPROM, Watchdog und vielem mehr. In der Tat ist es mit wenigen Änderungen möglich, diesen flotten Flitzer auf dem cpuBoard4051 einzusetzen, sofern die Rechenleistung des 8051-Kerns (in den Atmel Prozessoren AT89C2051 bzw. AT89C4051) für besonders anspruchsvolle Anwendungen nicht ausreicht. Auch aus Interesse an der Sache macht der Einsatz des schnelleren AVR-Prozessors durchaus Sinn, denn etwas Neues zu Lernen macht ja auch eine Menge Spaß.
|
Pinbelegung des Atmel AT90S2313 |
Ein Blick auf die Pinbelegung unseres Kandidaten im Vergleich zum Schaltbild zeigt die frappierende Ähnlichkeit beider Prozessoren, die durchaus nicht zufällig ist. Die nötigen Änderungen sind daher schnell beschrieben: R1 und C3, die Bauteile zur Beschaltung des Reset-Einganges können ersatzlos entfallen, wahlweise kann man statt des Elkos C3 einen Widerstand von 100 kOhm und statt des Widerstandes R1 einen Taster (Schließer) gegen Masse einsetzen. Dieser dient somit als manueller Taster für Reset. Der Atmel 2313 wird durch den 11.0592 MHz-Quarz um etwas über 1 MHz zu hoch getaktet, aber das macht er anstandslos mit. In der Regel wird man die Quarzfrequenz der jeweiligen Anwendung anpassen und kleiner als 10 MHz wählen. Bei dieser Frequenz bietet der Atmel AT90S2313 satte 10 MIPS, d.h. er verarbeitet 10 Millionen Befehle in der Sekunde! Für diesen Prozessor finden Sie auf der CD einen Basic-Compiler (Demo), der 1 kByte Code erzeugt, im Verzeichnis \etronik\embedded\basavr. Wer statt Basic lieber in Assembler werkeln möchte, lädt das aktuelle "AVR-Studio" kostenlos bei www.Atmel.Com aus dem Internet. Leider konnte das Programmpaket aufgrund der Größe und des Copyrights nicht mit auf die CD kopiert werden.
Zum Programmieren der Prozessoren benötigen Sie einen Programmer. Für AT89C2051/4051 finden Sie ein Exemplar, dass prima mit dem Basic-Compiler BASCON8051 zusammen arbeitet, unter dieser Adresse
Zum benutzten Bascom8051 klicken Sie hier: www.bascom.de. Selbstverständlich können Sie das cpuboard4051 auch in Assembler programmieren.
Und hier geht es zum Download.
Für dieses Projekt biete ich einen Platinenservice an.