Archiv verlassen und diese Seite im Standarddesign anzeigen : Welchen PIC nehme ich ?
Hallo,
Vielleicht kann mir jemand gute Info´s an die Hand geben, bzw. mir Tipps geben wie ich die Sache richtig angehe.
a) Ich benötige den richtigen Chip, nicht zu überdimensioniert. Aus der Reihe PIC16Fxxx.
Folgende Aufgabe möchte lösen.
Ich möchte die Ziffern 0-9 über eine Tastatur eingeben, diese sollen dann über ein Display direkt zu sehen sein. Anschließend soll über einen Taster diese Ziffer eingelesen werden und per Sprachausgabe diese Ziffer per Sprache zu hören sein.
Ist es nur über einen ISD Sprachausgabechip möglich oder auch über den Flash Memory des PIC?
Wenn mir jemand den Ansatz für beide Möglichkeiten liefert wäre es toll!!!
Gruß Staudi[/code]
kalledom
04.04.2006, 12:51
Hallo Staudi,
das mit der Tastatur und Anzeige ist eine einfache Angelegenheit:
8...10 Ein- / Ausgangs-Pins für die Tastatur, 4 oder 8 plus 2 für ein LC-Display, ein PIC 16F877 wäre da schon recht gut für geeignet.
Mit dem Flash-Speicher fangen aber die Probleme an. Der 16F877 hat zwar 8 K Flash, der ist aber mehr für Programm-Code vorgesehen und weniger für Daten. Auch der Eeprom-Bereich mit 256 Bytes dürfte da etwas bescheiden ausfallen.
Für die Sprach-Daten benötigst Du externen Speicher, z.B. Eprom oder Eeprom, wo die Sprach-Daten drin sind.
Auch so einen externen Speicher kannst Du noch vom PIC 16F877 aus steuern. Bleibt zu überlegen, auf welche Weise diese 'Steuerung' realisiert wird.
Danke Karl Heinz,
hast du vielleicht auch Kenntnisse mit dem ISD Sprachausgabechip.
Ist dieser leicht einzubinden?
Gruß Staudi
kalledom
04.04.2006, 15:57
Kannst Du die genaue Bezeichnung oder einen Link zu einem Datenblatt posten, dann schau ich mir den Baustein mal kurz an.
Wo sitzen die Daten für die Sprachausgabe ? Wer bestimmt, was der Sprachausgabechip ausgeben soll ?
phaidros
05.04.2006, 01:37
Entscheidend ist die gewünschte Sprachqualität. Minimal (Telefonqualität) sollte man Sprache mit 8000 Samples pro Sekunde und 8 Bit Auflösung abtasten. Jede Ziffer dauert gesprochen ungefähr eine halbe Sekunde. Das macht 10 Ziffern * 0.5 s * 8 kByte = 40 kByte Speicherbedarf für die Sprachdaten. Ein 24LC512 EEPROM sollte also reichen. Der PIC liest die Daten und haut sie 8000 mal pro Sekunde über einen Port raus. Müsste bei 10 MHz Takt machbar sein.
kalledom
05.04.2006, 10:59
Könnte mit dem Sprach-Eprom und etwas Hardware (Taktgenerator, Adress-Zähler, einige Gatter) nicht eine eigenständige 'Sprachausgabe-Einheit' aufgebaut werden, die vom PIC die höchsten Adress-Bits mit dem gewünschten Text-Bereich und ein Startsignal bekommt und am Ende der Sprachausgabe (die Texte sind ja unterschiedlich lang) einen 'Fertig-Impuls' an den PIC liefert, der dann wiederum die nächste 'Zahl' vorbereitet ?
Wenn alles über den PIC laufen soll, sind immerhin 13...15 Bits für Eprom-Adressen und 8 für Eprom-Daten = je ein Port-Pin des PIC erforderlich, es sei denn, Adressen und Daten werden gemultiplext; dann sind es immer noch 13...15 Bits plus Steuer-Bits.
Hallo!
@phaidros
Ich habe mich vor ca.30 Jahren ein bischen mit digitaliesieren der Sprache beschäftigt (damals hat es noch keine Mikrokontroller gegeben).
Die Abtastfrequenz sollte das doppelte der max. Frequenz sein. Ich habe aber die Hälfte also die max. Frequenz genommen und zwischen zwei Samples noch ein "künstliches" Sample ausgegeben. Dieses Sample war einfach der Mittelwert den beiden. Die Qualität war nicht viel schlechter. Somit habe ich den Speicher halbieren können.
Laut Deiner Berechnung, wenn man diese Methode nimmt, werden nur 20kB Programmspeicher benötigt. Z.B. der PIC 18F252 oder 18F2550 hat 32kB Programmspeicher, dann bleiben noch 12kB für Programm und ausser Tasten und Display ist keine externe Hardware erforderlich. Vielleicht wäre die Idee für Dich nutzlich ? :)
MfG
phaidros
05.04.2006, 23:11
@PICture: Ja, an die 18er Reihe habe ich auch schon gedacht. Staudi wollte aber einen 16er nehmen.
@kalledom: Das EEprom ist ein I2C-Baustein. braucht also nur 2 Leitungen.
kalledom
06.04.2006, 01:31
@phaidros
Was das I2C-Eeprom betrifft:
1. Wieviel KiloByte (nicht KiloBit) hat das größte I2C-Eeprom ?
2. Wie lange dauert es, bis alle Daten per I2C ausgelesen sind ?
3. Wo werden die ausgelesenen Daten abgelegt ?
phaidros
07.04.2006, 03:39
@kalledom:
1. Keine Ahnung.
2. Der I2C-Bus kann mit mindestens 100 kb/s laufen. Macht also ungefähr 10 KByte pro Sekunde.
3. Nirgendwo. 8000 mal pro Sekunde holst du einen Wert aus dem Eeprom und gibst ihn sofort wieder auf einen Port aus. An dem hängt ein einfacher D/A-Wandler oder ähnliches. Du musst nur für jede Ziffer Anfangs- und Endadresse im Eeprom wissen. Alle Daten dazwischen werden ausgegeben.
kalledom
07.04.2006, 23:12
@phaidros
Wenn Du 20 kByte für Daten brauchst und bei I2C mit 100 kBit/s übertragen kannst, dauert das Auslesen 20 kByte * 8 Bit = 160 kBit = 1,6 Sekunden.
Wenn diese Daten nicht im Controller abgelegt werden können, wie willst Du 8.000 Bytes pro Sekunde ausgeben ?
phaidros
08.04.2006, 00:56
@kalledom:
Wie funktioniert Sprachausgabe mit einem PIC? Ich muss innerhalb eines festen Zeitintervalls (der Samplingperiode, sagen wir mal 1/8000 Sekunde) einen analogen Wert auf einen Lautsprecher legen. Ich hole mir diesen Wert aus dem Eeprom (dauert 1/10 000 s) und gebe ihn auf Port B wieder aus. Ich inkrementiere einen Zähler und mache mit dem nächsten Wert weiter.
Gruß
Phaidros
kalledom
08.04.2006, 12:23
@phaidros
Um Daten aus dem Eeprom zu lesen, müssen einige Bytes gesendet werden, z.B. I2C-Adresse, Daten-Beginn-Adresse, Daten-End-Adresse, was sonst noch ?
Dann erst wird das Eeprom Daten liefern.
Addiert sind das Minimum 40 Bits = 40/10.000 s = 4/1.000 s = 32/8.000 s; die Samplingrate beträgt aber 1/8.000 s ???
phaidros
08.04.2006, 21:48
Das Eeprom 24LC512 hat einen internen Adresszähler. Die Adresse wird einmal am Anfang übermittelt, danach werden der Reihe nach alle Bytes ausgegeben, solange bis der PIC STOP sagt. Es wanderen nur ca. 20 Bits über die Leitung für ein auszugebendes Byte. Und die Frequenz des Busses beträgt nicht 100 kHz (war nur eine Abschätzung nach unten), sondern 400 kHz (hab noch mal im Datenblatt geschaut). Ich hab es selber noch nicht ausprobiert, habe aber genügend Erfahrung mit PICs um vom Gefühl her sagen zu können, dass es auf jeden Fall funktioniert würde.
Gruß
Phaidros
kalledom
08.04.2006, 23:24
@phaidros
Du hast Recht, mit einem 24LC512 im 400 kHz-Modus sollte es funktionieren.
Das mit dem sequentiellen Auslesen eines I2C-Eeproms ab einer vorgegebenen Adresse mit post-inkrement war mir nicht bekannt, weil ich mit I2C bisher nichts gemacht habe; deshalb habe ich auch noch nie den I2C-Teil im 16F877-Datenblatt gelesen.
Der Speicher des 24LC512 ist mit 64 kByte zwar etwas knapp, wenn jede Ziffer im Schnitt mit 0,8 s gesprochen wird, dann sind 0,8 s * 8.000 Bytes/s = 6.400 Bytes pro Ziffer * 10 Ziffern = 64.000 Bytes erforderlich.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.