Forum: Mikrocontroller und Digitale Elektronik ATtiny2313 statt AT90S2313


von Knut K. (ckk)


Lesenswert?

Hallo,

gibt es jemanden hier im Forum, der mir ein vorhandenes Programm auf den 
ATtiny umschreiben kann??
Für einen Rechteckimpulsgeber zur Ansteuerung eines Filmprojektors hat 
mir ein freundlicher Mensch die Schaltung entwickelt und das Programm 
geschrieben. Jetz erreiche ich ihn aber nicht mehr und der AT90S2313 hat 
einen Nachfolger...
Nachbauen und das Programm draufschreiben habe ich geschafft, aber mit 
Programmieren kenne ich mich nicht aus. Und ich habe auch viel zu wenig 
Gelegenheit, mir das anzueignen. Betreibe das ja nur als gelegentliches 
Hobby.
Mit dem ATtiny sind die Funktionen zwar vorhanden, aber die 
Taktfrequenzen stimmen nicht. Geschrieben wurde das Programm mit Basic. 
Ich habe das Bascom AVR. Also zumindest habe ich es geschafft, den µC zu 
beschreiben.
Aber was ich so alles tue weiß ich nicht immer so genau...:-))

Also, es wäre super, wenn mir da jemand zumindest eine Hilfestellung 
geben kann und sich auf meinen "Hilferuf" meldet!

Gruß Knut

von Hubert.G (Gast)


Lesenswert?

Hast du auch die Fuses umgeschrieben? Es wird zu langsam sein.
Wenn du das Programm für den Tiny kompiliertst sollte es sonst 
funktionieren wenn du keine Fehlermeldungen bekommst. Mit BASCOM selbst 
kenne ich mich nicht aus.

von ES (Gast)


Lesenswert?

Ja, wo isses denn?
Zeig das Programm mal her.

von Roland Z. (r-zimmermann)


Lesenswert?

Das umschreiben eines Bascom-Programmes ist nicht schwer, du musst nur 
folgendes beachten:

1. Taktung des Chips, welche Quelle verwendest du? Die richtige Taktrate 
im Programmcode definieren sonst läuft das Prog. zu schnell oder zu 
langsam.
2. In der Kopfzeile des Programmes den verwendeten Chiptyp anpassen, 
also das richtige .def einbinden.
3. Schauen ob beim neuen Chip die Portbezeichnungen mit dem "alten" 
übereinstimmen, am Besten die Betreffende Seite im Datasheet ausdrucken 
und nebeneinander legen, so vergleicht sich das besser.
4. eventuell die Verwendeten Timer anpassen, (Prescale usw)
5. Fusebits richtig setzen, aber bevor (!) du dabei auf "Burn" klickst 
doppelt kontrollieren ob alles stimmt sonst hast du dich aus dem Tiny 
"ausgesperrt"! Vorsicht: Finger weg von der Reset-Disable Fuse sonst ist 
Feierabend wenn du keinen HV-Progger hast.

Wenn du dies beachtest sollte das Proggie eigentlich gehen nachdem du 
das in den Chip gebraten hast.

Poste das Programm hier am besten mal dann kann ich mehr sagen.

$regfile = "attiny2313.dat"  <-- richtigen Chip definieren
$crystal = 9600000           <-- richtige Taktfrequenz definieren
Das nur mal als Anregung.

Roland

von knut (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

danke für die schnellen Antworten!
Hab mal das Programm als Textund als Datei angehangen.
Der externe Quarz ist 4 MHz. Und ich dachte, ich muss da eine Datei zur 
Erkennung des µC einfügen und nicht nur eine Bezeichnung eingeben.
Aber sorry wenn ich mich dumm anstelle, ich habe davon keinerlei Ahnung, 
versuche aber, mich da reinzudenken!
hier der Text:
'taktgeber02.bas

$regfile = "2313DEF.DAT"                                    'AT2313
$crystal = 4000000                                          'Quarz: 
8.0000 MHz


Ddrb = &B00000000                                           'Pins PB0 - 
PB7 als Eingang konfigurieren
Portb = &B11111111                                          'Pullups PD 
an

Ddrd = &B01010000                                           'PD Eingang, 
PD6 und 4 Ausgang
Portd = &B00101011                                          'Pullups PD 
an

Config Timer1 = Timer , Prescale = 1 
'Timer0-Takt= Quarz/1024
On Timer1 Ontimer1
Enable Timer1
Stop Timer1

On Int0 Starttaste 
'Interrupt-Routine für Taste
Config Int0 = Falling                                       'Interrupt 1 
bei H/L-Flanke auslösen
Enable Int0

On Int1 Stoptaste 
'Interrupt-Routine für Taste
Config Int1 = Falling                                       'Interrupt 1 
bei H/L-Flanke auslösen
Enable Int1

Enable Interrupts

Dim Presetwert As Word
Dim A As Byte
Dim B As Bit

Presetwert = 40000
B = 0


'=======================================================================
'====================== Hauptschleife ==================================
'======================================================================
Do

A = Pinb

Select Case A
 Case 251 : Presetwert = 25599                              '25Hz
 Case 247 : Presetwert = 23934                              '24Hz
 Case 239 : Presetwert = 10043                              '18Hz
 Case 223 : Presetwert = 54440                              '90Hz
 Case 191 : Presetwert = 56458                              '110 Hz
 Case Else : Presetwert = 5600                              '16 2/3
 End Select

If Pind.5 = 0 Then
  If Pind.2 = 1 Then Gosub Stoptaste
End If

Loop
'=================================================================
'==================  Ende Hauptschleife ==========================



'=================================================================
Ontimer1:

Timer1 = Presetwert
Toggle B
If B = 1 Then Toggle Portd.6

Return
'=================================================================


'=================================================================
Starttaste:

Portd.4 = 0
Start Timer1

Return
'=================================================================




'=================================================================
Stoptaste:

Stop Timer1
Portd.4 = 1
Portd.6 = 0

Return
'=================================================================



End

Und hoffentlich klappt es, noch als File:

Gruß
Knut

von Roland Z. (r-zimmermann)


Lesenswert?

Hallo Knut:

Weitere Fragen:
Verwendete der at90s2313 auch einen 4MHz Quarz zur Taktung, oder mit 
welcher Taktrate lief der? Wenn ja sollten die Zeiten eigentlich auch 
beim ATtiny2313 stimmen.
Das du eine Datei für den uC angeben mußt ist richtig!
Der Programmteil:

$regfile = "2313DEF.DAT"   <-- Da steht die Definitionsdatei des uC 
Drin!
$crystal = 4000000    'Quarz: 8.0000 MHz  <-- Hast du da was geändert 
sollte das nicht 8MHz heißen oder ist das ein Schreibfehler?

also das was nach dem $regfile in Anführungszeichen steht ist die 
besagte Definitionsdatei (die ist bei Bascom dabei schau mal in den 
Programmordner rein), Da stehen alle Infos drin die Bascom braucht daß 
der Chip korrekt angesprochen werden kann und noch div. Internas des uC 
(sind anfänglich nicht so wichtig für dich)
Deine Vermutung mit der Datei ist also richtig gewesen. Das angeben der 
Definitionsdatei erspart dir das früher notwenige manuelle einfügen der 
ganzen Parameter und hält den Code schön übersichtlich.

Ich habe deinen Code mal in Bascom kopiert und Compiliert nach Änderung 
des uC-Definitionsfiles. Geht einwandfrei, der Programmcode sieht auch 
nicht sonderlich kompliziert aus.

Aber Achtung: Du schreibst weiter oben was das die Zeiten nicht stimmen. 
Wenn du einen neuen ATtiny2313 nimmst hat der den internen Oszillator 
aktiviert (Logisch sonst kannst du den nicht Proggen). Aber gleichzeitig 
ist auch die Teiler-Fuse gesetzt, d.h. der Takt wird intern durch 8 
geteilt. Auch wenn du auf einen externen Quarz umstellst und die 
Teiler-Fuse nicht änderst, hast du das Problem das der uC mit dem um den 
Faktor 8 verringerten Takt rennt und somit dein Timer auch um den 
entsprechenden Betrag zu langsam läuft!

Mit was für einem Progger und was für einem Programm programmierst du 
den Tiny?

Roland

von Knut K. (ckk)


Lesenswert?

Hallo Roland,

also extern, an den µC angeschlossen, ist ein 4 MHz- Quarz. Wo die 8 MHz 
rechts im Programmtext herkommen weiß ich nicht. Ich habe gedacht, das 
hat mit dem internen Quarz zu tun. Ist aber vielleicht ein 
Schreibfehler.

Ich schau mal, ob ich das rausfinde mit der Definitionsdatei!

Nach Test der Bildfrequenzen habe ich seinerzeit festgestellt, dass sie 
nicht genau gepasst haben und ich konnte irgendwie berechnen, was ich 
für Zahlenwerte bei "Presetwert" ändern muss. Aber das kann ich im 
Moment auch nicht mehr nachvollziehen. (waren geringfügige Zahlenwerte)

An Fuses oder so hab ich nicht rumgestellt- das ist mir auch ein Buch 
mit 7 Siegeln (vielleicht ändert sich das ja aber auch noch).

Das Programm ist mit Bascom-AVR erstellt bzw. dann Kompilliert, was ich 
mir als Demo geladen habe, aber für diesen Umfang ausreicht. Den 
Brennadapter habe ich mir nach dem Buch von "Rowalt" erstellt und über 
das dort beschriebene Experimentierboard draufgeschrieben.

Aber wie schon gesagt, ich habe von der Sache keine Ahnung! Versuche 
nur, mich da einzuarbeiten bzw. das irgendwie umzusetzen oder zu 
verstehen.

Knut

von knut (Gast)


Lesenswert?

Hallo Roland,

hab es mir grad mal angesehen.
Der Programmer im Bascom heisst "MCS Universal Programmer"- wird 
jedenfalls beim Compilieren gestartet. Dort kann ich dann auswählen, 
welcher µC es sein soll, aber im Bascom selbst finde ich erstmal nichts, 
welche Datei ich da als "regfile" eintragen soll.

Gruß Knut

von Falk B. (falk)


Lesenswert?

@ Knut Krätzschmar (ckk)

>An Fuses oder so hab ich nicht rumgestellt- das ist mir auch ein Buch
>mit 7 Siegeln (vielleicht ändert sich das ja aber auch noch).

Ja, das Thema ist bisweilen heiss. Aber nicht unlösbar.

>Das Programm ist mit Bascom-AVR erstellt bzw. dann Kompilliert, was ich
>mir als Demo geladen habe, aber für diesen Umfang ausreicht. Den

Wenn du den AT90S2313 durch den ATtiny2313 ersetzen willst brauchst du 
das Programm nicht neu komipieren. Der ATtiy2313 ICs sind 100% 
codecompatibel zum alten AVR. Du musst nur die Fuses richtig einstellen 
und er läuft.

Du musst in das LOW FUSE BYTE eine 0xDC reinschreiben, dann läuft der 
tiny2313 wie der alte 2313 mit externem Quarz. Die zwei anderen Fuse 
Byte musst du nicht ändern.

MFG
Falk

von Falk B. (falk)


Lesenswert?


von Roland Z. (r-zimmermann)


Lesenswert?

@ Falk brunner,

täusche ich mich oder ist bei dem tiny2313 nicht die timergeschichte ein 
wenig mit anderen registeradressen versehen?

Da war doch mal was, ich erinnere mich dunkel da mal was gelesen zu 
haben...
Beispiel: Beim AVRISP ist nen 90s2313 drauf den kann man nicht gegen nen 
tiny2313 ersetzen obwohl der pinkompatibel ist da der hexcode da drauf 
angeblich nicht laufen soll (so hier irgendwo im Forum gelesen)

MfG
Roland

von Falk B. (falk)


Lesenswert?

@ Roland Z. (r-zimmermann)

>täusche ich mich oder ist bei dem tiny2313 nicht die timergeschichte ein
>wenig mit anderen registeradressen versehen?

AFAIK nein. Lese er selber.

http://www.atmel.com/dyn/resources/prod_documents/doc4298.pdf

MFG
Falk

von Roland Z. (r-zimmermann)


Lesenswert?

@Falk Brunner,

ok, dann ist die Info die ich hatte inkorrekt, dein link hat mich 
überzeugt.

von Knut K. (ckk)


Lesenswert?

Hallo,

so richtig weiter bin ich aber noch nicht gekommen!!
Ich habe zunächst versucht, das passende Regfile zu finden, aber da 
scheitert es schon. Schreibe ich einfach mal "tiny" mit rein, dann kommt 
schon "nicht gefunden"... Also muss es doch irgendwo ein passendes File 
geben, aber wo??

Und an die weiter oben beschriebenen Fuse- Einstellungen komme ich auch 
nicht- vielleicht weil nicht der richtige µC ausgewählt ist....???

Fragen über Fragen!

Gruß
Knut

von Holger K. (krulli) Benutzerseite


Lesenswert?

$regfile = "attiny2313.dat"

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
Noch kein Account? Hier anmelden.