Hi Leute,
ich würde gerne für eine kleine Bastellei mit hilfe eines TINY13 einen
I2C to UART Converter bauen. Das Problem ist nun das dieser keine der
beiden Schnittstellen in Hardware hat. Ich weiss ich könnte einen
anderen Chip nehmen ,aber ich möchte gerne den kleinen 13er verwenden.
Das ganze soll so laufen das er per I2C ein Byte bekommt und dieses dann
per uart weiterleitet. Zu anfang soll dies erstmal nur in eine Richtung
funktionieren.
Mein problem ist nun das ich keinen Plan habe wie ich das am besten
mache.
Ich habe hier zwar vom ELEKTOR den Bascom Quelltest für einen I2C Slave
aber ich bekomme in einfach nicht in C Portiert wegen dem Assembler
teil.
Kann mir eventuell jemand dabei helfen sonst kann ich mein kleines
Projekt knicken.
Danke im Vorraus
Alexandra
Man muß trotzdem keine Klimmzüge machen deswegen. Alleine der etwas
knappe Flash des 13ers wird Dich bei Deinem Vorhaben ausbremsen. Beim
Tiny2313 hättest Du beide Interfaces in Hardware.
Der ATtiny13 ist von allen AVRs am schlechtesten geeignet, weil er weder
USI noch Quarzoszillator (für UART wichtig!) hat.
Schon der standard 100kHz I2C-Takt ist kritisch, Du mußt innerhalb 4µs
auf den Mastertakt reagieren.
38 CPU-Takte sind schnell verbraucht (ein leerer Interrupt sind schon 10
Takte).
Nimm den ATtiny25 und nem Quarz dran.
Peter
Nein bleibe beim 13er :-) okay lassen wir den uart teil erstmal weg.Mit
dem Elektor Code klappt I2C richtig gut aber ich hätte den gerne in
C.Habe versucht den Assembler teil in eine Extra *.S Datei zu verfrachte
und dann aus dem C Programm heraus die entsprechenden funktionen
aufzurufen aber das Problem ist das ich nicht so versiert in Assembler
bin. Das grösste Prblem ist das ich bei dem Tiny die Stack Init nicht
hinbekomme. Kann mir wenigstens dabei jemand helfen?
Gruss
Alexandra
Von nix ne Ahnung und beratungsresistent.
Andere sollen Deine Arbeit machen und noch zu Deinen schlechten
Vorgaben. Gehts noch?
Du erwartest doch nicht im Ernst eine Hilfe bei solchen Forderungen?
Sach mal gehts noch? Ich habe nur gefragt ob mir jemand sagen kann wie
ich den Stack Initialiesiere weil ich den Bisher nicht gebracuht habe
bei meinen Assembler Programmen weil ich größere sachen in C
Programmieren.
Wenn mir bei der Hauptfrage keiner helfen will weil es halt zu
kompliziert ist dann stört es mich das nicht ich würde gerne schauen ob
es nicht doch klappt. Schließlich hat man am anfang auch gesagt das ein
Pal-Video Signal mit einem Atmega8 nicht zu realisieren sei, aber es
klappt doch. Ich will nicht das mir einer die Abeit abnimmt ich hätte
nur gerne ein paar tipps.
Ich muss ja sagen das Forum hier war immer super aber in letzter Zeit
sind immer mehr leute Unterwegs die nur die Welle machen und motzen
können aber wahrscheinlich selber zu Blöd sind ne LED Leuchten zu
lassen.
mfg
Alex
> Nein bleibe beim 13er
Nunja, Kunst kommt von Können, käme es von Wollen, würde es Wulst
heißen... ;-)
> aber das Problem ist das ich nicht so versiert in Assembler bin.
Anscheinend nicht nur in ASM, sondern auch im Verständnis der benötigten
Ressourcen. Ich wage es, zu behaupten, dass ich die Architektur der
kleinen AVRs halbwegs kenne und ich würde es mir nicht zutraun, Dein
Projekt mal so nebenher mit einem Tiny13 zu realisieren.
Und wenn PeDa schon meint, die Chancen stünden schlecht, dann kannst Du
ihm das ruhig abnehmen, denn er kennt die Architektur exakt und ist in
ASM uns C sehr kompetent.
> Das grösste Prblem ist das ich bei dem Tiny die Stack Init nicht> hinbekomme.
Der Tiny13 initialisiert seinen (für ASM nötigen) Stack während des
Hardware-Reset selbst, siehe Datenblatt Seite 9.
Aber vermutlich meinst Du den für C nötigen Softwarestack für die
Argumentübergabe der Funktionsaufrufe, oder? Aber da halte ich mich
raus, da fehlt mir die Kompetenz.
Viel Erfolg...
...
>Mein problem ist nun das ich keinen Plan habe wie ich das am besten
mache.
>Kann mir eventuell jemand dabei helfen sonst kann ich mein kleines
Projekt knicken.
>Würde schon gehen hab aber hier 25 Stück von den 13ern liegen. Die sind
mir durch eine Pleite in die Hände gefallen :-)
>>Der ATtiny13 ist von allen AVRs am schlechtesten geeignet, weil er weder
USI noch Quarzoszillator (für UART wichtig!) hat.
Das sagt doch ne Menge aus.
>... aber wahrscheinlich selber zu Blöd sind ne LED Leuchten zu
lassen.
Mach ich nicht selber, sondern dazu nimm ich Strom, der kann das besser.
Guten Nacht.
Ja genau den Softwarestack. Ich nehme eure Tipps schon an aber wie
gesagt scheinbar ist I2C ja möglich, von der uart habe ich mich schon
verabschiedet. Aber ich mag Bascomm nicht und würde gerne das Programm
Portieren.Das einzige Problem ist halt der Stack den ich nicht
hinbekomme.Aber trotzdem danke schonmal dafür das es noch ein paar Leute
gibt die sich auch mit aussichtslosen dingen befassen und nicht
versuchen unter falschem Namen einen fertig zu machen.
Gruss
Alex
Noch vergessen:
> Ja genau den Softwarestack.
Den brauche ich in ASM nicht. In ASM verwaltet man die Ressourcen (und
damit auch Register und SRAM) selbst, da geht das ohne Stack besser. Es
steht Dir natürlich frei, dafür den "dümmsten" Pointer (also den
Pointer, dessen Verlust aufgrund seiner eingeschränkten Fähigkeiten am
wenigsten schmerzt, also den X-Pointer) zu benztzen und damit einen
Stack (LiFo) zu realisieren. Das wäre mir aber zu umständlich, ich
übergebe die Parameter meist in dafür reservierten RAM-Zellen oder
Registern.
...
Mhh okay das hört sich besser an, dann werde ich das mal so versuchen.
Das läuft doch dann über die STS und LDS Befehle nachdem ich das ganze
mit ".dsed" initialisiert hab oder?
> HeHe :-) nein bin wirklich eine Frau und Studiere in Bochum ET> Technik.
Dann wäre es vielleicht sinnvoll, Deine Arbeiten selbst zu erledigen,
anstatt sie von Anderen machen zu lassen. Oder teilst Du dann auch den
Lohn für die Arbeit (gute Noten, Abschluss, Diplom) mit den Helfern? Was
ist Dein Abschluss noch wert, wenn Du Deine Aufgaben nicht selbst
erledigst?
Nein, das ist kein Neid, nur etwas Gerechtigkeitssinn.
...
> Das läuft doch dann über die STS und LDS Befehle
Nööö, LDS/STS braucht keinen Pointer.
Vielleicht solltest Du Dir mal die Liste mit den ASM-Befehlen (ziemlich
am Ende des Datenblattes) ausdrucken und aufs Klo hängen...
...
Hannes Lux wrote:
> Und wenn PeDa schon meint, die Chancen stünden schlecht, dann kannst Du> ihm das ruhig abnehmen, denn er kennt die Architektur exakt und ist in> ASM uns C sehr kompetent.
Ich hab mir den Originalcode mal angesehen.
Man kann natürlich für immer und ewig auf den I2C-Start warten, wenn das
die einzige Task ist. Dann ist man auch schnell genug.
Und wenn man dann die I2C-Daten verarbeitet, stellt man sich solange
tot.
Bis man dann wieder auf ewig auf den nächsten Start wartet.
Der I2C-Master muß eben immer wieder versuchen, was zu senden, wenn er
NACK bekommt.
Schöner ist es natürlich, wenn I2C als Interrupt immer bereit ist, auch
wenn die UART als 2.Task derweil noch sendet.
Oftmals sollen Projekte auch wachsen und dann ist der Ansatz "ich bin
die einzige Task" mausetot und man muß nochmal ganz von vorne anfangen.
Ich nehme immer nen Quarz für die UART und hatte noch nie Probleme mit
der Baudrate. Oder eben Autobauding (1-wire-LCD, Bootloader).
Peter