Ich habe versucht an einen Mega8 einen Digital - Analog Wandler von Philips anzuschließen, aber leider scheint irgendwie in meinem Code der Wurm drinn zu sein es bleibt immer an der Stelle stehen wo eigendlich die Daten zum ersten mal gesendet werden sollten. Um erstmal zu überprüfen wo es stehen bleibt stehen überall im Code USART sendungen die mir den jeweiligen Punkt mitteilen. Damit hab ich auch herausgefunden das es an der Stelle in einer Endlosschleife stehen bleibt: void TWI_data(char DATA) { USART_write("TWI data"); TWDR = DATA; USART_write("TWI 1"); TWCR = (1<<TWINT) | (1<<TWEN); USART_write("TWI 2"); //Load DATA into TWDR Register. Clear TWINT bit in TWCR to start transmission of data while (!(TWCR & (1<<TWINT))) { USART_write("Endlosschleife ?"); //hier bleibt es hängen } //Wait for TWINT Flag set. This indicates that the DATA has been transmitted, and ACK/NACK has been received. USART_write("TWI 3"); } Der gesammte code ist aus dem Datenblatt vom Mega8 und nur in einzelne teile gespalten wobei ich einige teile weglassen musste da der compiler meinte die Funktion würde dort zum ersten mal benutzt: void TWI_start(void) { TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) // Send START condition while (!(TWCR & (1<<TWINT))); // Wait for TWINT Flag set. This indicates that the START condition has been transmitted if ((TWSR & 0xF8) != START)ERROR();//Gemeint ist diese Stelle mit !=START // Check value of TWI Status Register. Mask prescaler bits. If status different from START go to ERROR } Habe ich irgendein include vergessen ? (Gesammter Code im Anhang) Der Bus befindet sich zur Zeit nur kurz auf zwei Lochraster Platinen mit 1a Verbindung ca 10 cm und hat jeweil einen 10k pullup. Der TDA wird momentan mit 5V versorgt genauso wie der Mega8 (hängen beide an der gleichen Festspannungsquelle) Momentan sind die Ausgänge des DAC durchgehend nur 0,28 V. Am merkwürdigsten ist auch wenn ich die verbindung zwischen den Beiden trenne und dann die TWI komunikation starte , dann bleibt der Mega8 an der gleichen Stelle hängen. Deshalb vertrau ich meinem code überhaupt nicht. Ich hoffe mir kann irgendjemand zumindest nen Tipp geben wo mein Fehler ist ich Poste auch gleich noch das Datenblatt für den DAC. Was auch super wäre wenn jemand ein Beispiel für ein Twi-Komunikation kennt außer die von Atmel.
Hier ist noch das Datenblatt für den TDA 8444 die 3 Auswählbaren Adressbits liegen auf LOW also Masse und Vcc = Vmax. Gruß Andreas. Ich bin echt für jede Hilfe dankbar. Ich sitz da schon über ne Woche an diesem/n bekloptten Fehler(n).
Also ich kann dir nur den Code in Assembler anbieten. Was ich mir mal anschauen würde, ist, wer Master in dem ganzen spielt. Evtl. mal probieren, dem ATmega die Adresse 0 zu geben.
Erstmal danke für dein Angebot aber ich kann Assambler leider überhaupt nicht und da ich den Rest auch in c hab wollte ich das eigendlich nicht ändern. Nur zu dem Atmega die adresse 0 zuweisen ich dachte das dürfte man nicht weil das als "general call" reserviert ist. Ich versuch es nochmal alles im Datenblatt zu vergleichen ich glaub Atmel weiß wie es seine eigenen Devices programmiert. Gruß Andreas
Ok, hab mich in der Adresse geirrt =) 1. Meinte eigentlich den Startwert für Mastermode (0b11111110 oder 0xFE) 2. Probier mal, wenn du die Statuscodes ausliest. --->>> Die Zeilen mit if ((TWSR & 0xF8) != MT_SLA_ACK) Die Codes sind unterhalb des Referenzbeispiels. allenfalls warte solange, bis der richtige Statuscode ausgelesen wird. ansonsten kann ich softwaremäßig nicht viel finden. Fein wäre die Anschlussbelegungen an Mega8 und TDA.
Ich hatte vorher das mit dem if ((TWSR & 0xF8) != MT_SLA_ACK) auch im code übernommen aber mein compiler hat dann behauptet er wüsste nicht was für eine Funktion das wäre also hab ich das weggelassen. Fehlt da irgendein Include ? Leider ist Atmel da etwas ungenau was die Angaben zu den Includes in den Beispielen angeht. Und ich glaube ich weiß was du mit dem Startwert für mastermode meinst korregier mich bitte wenn ich mich irre du meinst die Deviceadresse (7-bit) und R/W teil ? Leider ist die Adresse von dem DAC größtenteils vorgegeben und die drei letzten bits konnte man nur ändern die habe ich alle auf 0 gelegt. Den Schaltplan muss ich erst zeichenen da der bis jetzt aus einer Zusammenstellung aus verschiedensten Teilen ist, aber sonnst bis auf die TWI-Komunikation einwandfrei funktioniert.( Ich muss nur leider Jetzt für ne Stunde weg und kann das erst wenn ich wiederkomme aber nur als Frage den Gesammten schaltplan oder nur die für TWI relevanten Teile ? ) Gruß Andreas
Es scheint irgendwie entweder ein gravierender Denkfehler meinerseits zu sein oder aber irgendeiner hardwaretechnisch. Ich hab das jetzt mit dem zip probiert und auch alles ohne Probleme umgeschrieben. Aber es bleibt wieder an der selben Stelle hängen wieder beim schreiben der Daten nach der Angabe der Deviceadresse. Hardware ist im Prinzip ein Mega8 in Minimalbeschaltung wie hier auf der Seite zu finden mit Anschluss über nen Max232 an den Pc und dann das Twi ist ja an den Pins 28 und 27 die sind jeweils mit 10k ( habs auch nachgemessen ) gegen High ( +5 V ) die gehen über ein kurzes kabel dann auf eine andere Platine ( hatte keinen Platz auf der mehr die war etwas klein ) und ist dort mit dem DAC verbunden. Der DAC : TDA 8444 mit der Pinbelegung 1+2 gegen +5V, 4 an 28 (SCL) und 3 an 27 (SDA), 4-8 gegen Masse und den Rest also 9-16 an ner Stiftleiste zum messen gegen Masse, kommt immer 0,28V. Clock ist 16mhz durch nen Quarzoszillator von Reichelt funktioniert auch super. Die Pc-RS232 Komunikation funktioniert super mit Baud 9600. Nur halt das verdammte Twi nicht. Gruß Andreas
Hallo Andreas, mir scheint bei der Benutzung von P.Fleurys i2cmaster.zip (Dein letztes Posting) fehlt - der Aufruf von i2c_init() - und F_CPU sehe ich auch nirgends, dann wird es zu 4 MHz angenommen Der SCL-Clock wird zu 100 kHz initialisiert (in twimaster.c). Viel Erfolg Hermann-Josef
Weißt du was du verdienst nen Orden =). ES GEHT ^^ Was am anfang falsch war ist egal aber am ende war es jetzt das Fehlen der Initalisierung. Die F_CPU hab ich in der Datei geändert gehabt außerdem ist das auch in meinem "timer"-include und der Makefile angegeben. Gruß ein glücklicher Andreas
Hi, ich hab erst seit Kurzem mit dem ATMega zu tun und würde gerne einen D/A-Wandler mit dem TDA8444 realisieren. Da ich außerdem nicht sehr große Kenntnisse in der C-Programmierung habe, bitte ich euch, das funktionierende Programm hochzuladen und wenn möglich es etwas zu erläutern. Vielen Dank schon mal, Klute
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.