mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Crashkurs in Sachen I²C-Bus


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
I²C-Bus mit AT90S2343 oder AT90S1200 ist mir noch gänzlich unbekannt.
Erst 2 Projekte hatte ich gemacht mit I²C. Ich wollte mir mal was
zusammenbauen das so aussehen sollte:

Ein PCF8574 hat 8 Eingänge, jeweils LOW-Aktiv. Der gibt die Befehle an
den AT90S2343 oder AT90S1200. Der widerum steuert meinen Display (Siehe
Anhang mit PCF8576 als Treiber) einen PCF8574, X24C04, PCF8583 und einen
TDA7313 an.

P0=+
P1=-
P2=set
P3=standby
P4=Loudness/Normal
P5=Stereo/Mono/Spatial Stereo/Spatial Mono
P6=Reset
P7=Kanalumschaltung

Für Set stelle ich mir folgendes vor:
Bässe = bAE
Höhen = HOE
Balance = bAL
Lautstärke=LAU
Fader = FAd
Uhrzeit Stunde = HO
Uhrzeit Minuten = In

Im Display Wird neben den SET-Angaben auch die Ziffern 0 bis 9 bei der
Uhrzeit 00 bis 59 angezeigt. Mit + und - wird justiert. Später wird die
Uhrzeit angezeigt. Alle Daten sollten im X24C04 gespeichert werden.

Der zweite PCF8574 schaltet (LOW-Aktiv).
P0=Mono
P1=Stereo
P2=Spatial Stereo
P3=Spatial Mono
P4=Standby
P5=Kanal1-LED*
P6=Kanal2-LED*
P7=Kanal3-LED*

*Der Kanal wird im TDA7313 umgeschaltet, an den Ports hängen nur die
Status-LEDs.

Ist dies möglich das zu machen? Ich selbst komme nicht weiter.
Helfen würde es mir, wenn mir jemand sagt wie man den µC sagt, er solle
den jeweiligen IC das ausführen lassen.

Autor: Markus_8051 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Alex,

also ich kann Dir aus eigener Erfahrung sagen, daß der I2C-Bus für die
Abfrage einer Tastatur sehr langsam ist. Das mag gehen, wenn man nur
ein paar Tastendrücke benötigt, um einen Betriebsmodus zu wechseln,
aber z.B. die Uhrzeit darrüber über +/- Tasten einzustellen macht
keinen Spaß!

Leider kenne ich den AT90S2343 oder AT90S1200 nicht, aber hast Du da
nicht noch ein paar Portpins frei? Oder Du legst die Tasten über Dioden
an schon benutzte Portpins. Die gemeinsame Rückleitung der Taster
steuerst Du dann über einen freien Protpin an.

Die Ausgaben über I2C (auch Display) ist schnell genug. Hier könnte ich
Dir aber höchsten mit 8051-Assembler Librarys helfen.

Gruß,
Markus_8051

Autor: Andreas Hesse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

AVR-Ansteuerungsroutinen für den  I2C Bus gibt es für Assembler, C und
Bascom: Könnte ich Dir zumailen.
(PCF8754 und Display habe ich selbst mal versucht).
Die Timing Aspekte könnten problematisch werden.

Ausserdem sollte man (zumindest für Hochsprachen) einen Controller mit
RAM nehmen. I2C sollte aber auch auf dem 1200er laufen.(Atmels
application Note war glaube ich für den 1200er).
Ich würde aber Eingänge auch direkt vom AVR lesen.

Gruss
Andreas

Autor: Alex (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Also so müsste es gehen.
Könnt ihr mir die AVR-Ansteuerungsroutinen zusenden. Wäre echt eine
Hilfe.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Wieso moechtest du alles ueber diese teuren I/O Expander machen?
Nimm doch gleich lieber ein groesseren AVR. (mehr I/O's und Flash)

Die 8 Tasten (in der Zeichnung) wuerde ich als Keymatrix schalten und
ueber eine Diode an den ext. INT des AVR's haengen. (Beispiel bei
Atmel als Appnote)

Irgendwie sieht die Zeichnung wie ein Abbild aus einem billigen Toyota
Radio aus.

Falls du mehr I/0's brauchen solltest kannst du lieber als Eingang
z.B. 74HC165 und als Ausgang 74HC595 nehmen und diese per SPI
ansteuern.

Mfg

Dirk

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hab noch was vergessen ... mit einem anderen AVR z.B. Mega8 o. Mega16
koenntest du auch noch den PCF8583 weglassen. Diese Avr's bieten die
Moeglichkeit ueber den Timer2(asynchronen Mode) und einem 32,xxxkhz
Quarz eine Uhr zuprogrammieren.

Mfg

Dirk

Autor: Ralph Dillhardt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

habe ein paar Routinen für den PCF8593 rausgekramt. den Verwende ich
öfter, sollte zumindest in der Programmierung Identisch sein.

Gib mir mal ne Info, wie weit du gekommen bist.

Viel Glück

Gruss
Ralph

Autor: Ralph Dillhardt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und siehe da,

ein paar Testroutinen zum 24LC65 habe ich auch noch gefunden.

Die I2C-Master-Routinen für die Prozessoren AT90S2343 oder AT90S1200
kannst du der Application Note AVR300 von Atmel entnehmen.

Bis bald.
Ralph

Autor: Günter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ralph

Ich habe hier mitgelesen und dabei Deine I²C-Routinen 'entdeckt'

Für ein Projekt (Modelleisenbahn) kann ich diese I2C-Routinen
bestens gebrauchen.
Deine Programme sind übrigens sehr gut strukturiert und dokumentiert.

Da ich aber nicht gerade ein ASM-Experte bin, hierzu eine kurze
Frage:

>rcall i2c_start <------------      ;I2C Start Condition
>ldi i2c_buffer, 0b10100000      ;Slave addresse
>rcall i2c_write <------------      ;Write Slave address

Wo und wie findet das Programm diese Unterprogramm-Routinen?
-------------------------------------------------------------

Kannst Du mir weiterhelfen ?

Gruß

Günter

Autor: Andreas Hesse (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hier ist code für ein PCF8576 basiertes Display.

Benötigt allerdings einen AVR mit RAM.

Gruss
Andreas

Autor: Andreas Hesse (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Günter

Die I2C-Routinen gab es auf der ATMEL-Seite (leider haben sie die
scheinbar heruntergenommen).
Lade im vorherigen Beitrag i2cdisp.zip herunter und nimm i2cdispr.asm.
Der Unterschied ist lediglich, das die Befehle statt I2C... immer
TWI... heissen.
Im Anhang ist noch die PDF-Datei, die Du brauchst, um die Routinen an
Deinen Prozessor anzupassen (Timing und so)

Gruss
Andreas

Autor: Alex (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich könnte man an der Tastenmatrix auch LEDs anhängen. Dadurch
könnte man auch Ports einsparen. Eines unter meinen Projekten war
dieses hier:
http://www.woe.onlinehome.de/projekte.htm#tuner
Könnte man da nicht die Uhr, Wecker und Display da einbauen. Ich hab
ausserdem gerade gesehen dass der TDA7313 nicht mehr billig zu bekommen
ist. Da dachte ich an den billigen TDA8425 der den Raumklang schon
integriert hat. Da spare ich wieder Ports.
Der µC im Tuner-Projekt hat ein internes RAM.
Toll wäre es wenn man den TDA9840 noch steuern könnte. Aber ich glaube
da ist kein Platz mehr dafür auf dem AT89C2051. Kann man den Quellcode
auch für den AT-Mega nehmen? Oder muss man da viel umschreiben?

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ein paar TDA6320 (TEA6320) haette ich abzugeben. Die IC's sind
gebraucht und im SIOC 20 Gehaeuse. Da sie gebraucht sind will ich auch
nicht viel Geld dafuer.

Mfg

Dirk

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zitat:
"Hi,

ein paar TDA6320 (TEA6320) haette ich abzugeben. Die IC's sind
gebraucht und im SIOC 20 Gehaeuse. Da sie gebraucht sind will ich auch
nicht viel Geld dafuer.
"

Die sind ja oft in Autoradios verbaut gewesen. Für den Anfang bräuchte
ich was in DIP, wegen dem Probeaufbau. Später kann man ja es mit
anderen ICs versuchen. Stöbere gerade im Keller rum. Da sind noch
einige Platinen von TVs darunter mit Soundcontroller, Stereo-Decodern
uvm. Melde mich wieder wenn ich die TEA6320 benötige. Datenblatt hab
ich.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mir da folgendes gesucht und gefunden:
http://www.eetasia.com/ARTICLES/2000AUG/2000AUG31_...
Hier wird gezeigt wie man LEDs und Tasten am selben Port verwendet. So
ähnlich stelle ich mir das auch in meiner Schaltung vor. Nur mit
AT89C2051 wegen dem Internen RAM. Später lade ich noch ein Schaltbild
hoch, wie ich meine Tasten anlegen würde.

Ports:
P1.0 COL1 LED8
P1.1 COL2 LED7
P1.2 COL3 LED6
P1.3 COL4 LED5
P1.4 ROW4 LED4
P1.5 ROW3 LED3
P1.6 ROW2 LED2
P1.7 ROW1 LED1

P3.0 SDA-Slave (Für später, falls der µC von einem anderen µC gesteuert
wird)
P3.1 SCL-Slave (Für später, falls der µC von einem anderen µC gesteuert
wird)
P3.2 SCL-Master
P3.3 SDA-Master
P3.4 AV (low-Aktiv)
P3.5 Standby (low-Aktiv)
P3.7 Anode Leds (BC559 als Treiber)

Tasten:
1  2  3  4
5  6  7  8
9  10 11 12
13 14 15 16

1=Lautstärke+
2=Lautstärke-
3=Bässe+
4=Bässe-
5=Höhen+
6=Höhen-
7=Sound (Balance, Spatial, Pseudo oder Bypass)
8=Standby
9=Minuten
10=Stunden
11=Wecker
12=Timer
13=AV
14=Kanal+ /Suchlauf+
15=Kanal-/Suchlauf-
16=P/C (Suchlauf)

Hat jemand ein Beispiel wie ich den Tuner, das EEPROM, Display und Uhr
ansteuern kann. Bei der Matrixtastatur blick ich noch nicht ganz durch.
Zumindest an dem Punkt wie ich Tasten und Befehle verknüpfe.

Autor: Alex (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Habe mal die CHIPADRESSE, SUBADRESSEN und DATENSÄTZE aufgeschrieben.
Kann mir einer helfen beim verknüpfen der Beispielcodes. Ich habe schon
2 AT90S2313 bestellt. Der AT90S2313 sollte schon dafür geeignet sein.
Oder ist wer anderer Meinung?

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

wieso kein Mega8? Die AT Serie ist doch net mehr Up to Date.

Mfg
Dirk

Autor: Ralph Dillhardt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Günter,

ich bin noch dabei die i2c Basis-routinen zu verbessern, aber mit dem
stand den ich im Anhang mitsende kann man schon arbeiten.

Solltest du noch Probleme haben sende mir einfach eine email mit
Betreff.

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Alex:
Der 2313 geht schon, aber ein Mega-8 ist aber auch nicht so viel teurer
und hätte den Vorteil des Hardware-TWI (= I2C) und so nette Features wie
interner RC-Oszillator (kein Quarz notwendig).

Zur Tastatur:
Ich nutze in solchen Fällen einen Timer-Interrupt mit ca. 50Hz, d.h.
alle 1/50 sec. wird die Tastatur abgefragt. Jeder Taste wird ein Code
zugeordnet (man könnte Deine Nummerierung verwenden) 0=keine Taste.
Dieser Wert wird in einer global genutzten Speicherstelle abgelegt und
kann von dort vom Hauptprogramm genutzt werden, im Hauptprogramm selbst
kann man mit den Tastencodes per Tabelle in verschiedene Programmteile
verzweigen.
Entsprechende Verfahren wurden schon öfters diskutiert, es sollte sich
in der Codesammlung einiges finden lassen.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also jetzt hänge ich noch hier:

audio:
call i2c_start ; I2C-Bus beschreiben
mov a,#80h     ; Chipadresse des TDA8421
call i2c_send
mov a,#00h     ; Befehladresse des TDA8421
call i2c_send
jmp audio,audio_volume
audio_volume:

Wie schaut das jetzt aus wenn ich Balance und Lautstärke senden möchte?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Damit meine ich jetzt wie ich die Datenadresse ausgebe.
Lautstärke:

Chipadresse: 80h
Befehladresse: 00h Volume left, 01 Volume right
Daten: leisesten C0h, lautesten FFh

Bei der Balance muss der derzeitig Wert der Lautstärke gleich bleiben.
angenommen die Daten sehen so aus:
links+rechts: 3Fh
Dann darf Links nur soviel betragen:
R=00h
L=3Fh
Bei gleicher Lautstärke der Kanäle:
R=3Fh
L=3Fh
Bei Rechts:
R=3Fh
L=00h
Da geht mir der Knoten nicht auf.

Autor: jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ist das Projekt eigentlich fertig geworden?

Gruß

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.