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.
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
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
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
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
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
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
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
Hallo, hier ist code für ein PCF8576 basiertes Display. Benötigt allerdings einen AVR mit RAM. Gruss Andreas
@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
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?
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
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.
Ich hab mir da folgendes gesucht und gefunden: http://www.eetasia.com/ARTICLES/2000AUG/2000AUG31_CT_MSD_AN.PDF 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.
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?
Hi, wieso kein Mega8? Die AT Serie ist doch net mehr Up to Date. Mfg Dirk
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.
@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.
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?
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.