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
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.
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
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
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
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
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
@ 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
@ 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
@ 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
@Falk Brunner, ok, dann ist die Info die ich hatte inkorrekt, dein link hat mich überzeugt.
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
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.