Hallo alle, ich hoffe, dies passt hier rein, war mir im Subforum für GCC nicht sicher, da ich auch Hardware-Fragen hab. Könnte mir eventuell jemand helfen, das recht kurze Programm nach Bascom zu porten? Ich hab von GCC bzw. C usw. gar keine Ahnung, mit Bascom komm ich eigentlich klar, solange es keine zu komplizierten Dinge sind. Ich würd den Code gern später erweitern, z.B. Triggern über einen anderen Port als /Reset, um die Schaltung so mit einem Schalter von der Batterie trennbar zu machen. Dann hab ich gelesen, auf den ursprünglich verwendeten ATtiny (ich glaub der hatte nur 1k) passen nicht alle Codes drauf. Gibt es eine Möglichkeit, die Codes "kleiner" zu machen? Sind doch eigentlich nur bits, bzw. highs und lows mit bestimmter Länge, oder? Oder passen die doch auf den von mir für's Bastelprojekt ausgewählten mega8? Das dritte Problem: wie umfangreich wären die Änderungen, wenn man einen 16 MHz Quarz nehmen würde? (Ansonsten muss ich irgendwie einen 8 Mhz-Quarz besorgen, ich hab außer 8 MHz so ziemlich alles finden können ... lol Ansonsten hat der mega8 doch auch einen internen 8 MHz RC-osc, warum wird da ein Quarz genommen? Spielt die Genauigkeit tatsächlich eine große Rolle in diesem Fall? Sollte der interne Osc auch gehen, würde es ja 3 BE ersparen. hier die Links zum Original-Projekt: http://www.ladyada.net/make/tvbgone/download.html und zum 48 LED-Ding auf mega8-Basis: http://www.youritronics.com/super-tv-b-gone/ beim 2. link werd ich aus dem source code auch nicht schlau. Vielen Dank für Hilfe, Nik
Einen Code von GCC zu Bascom zu portieren wäre ungefähr so wie einem Auto die Reifen abzuschrauben ;) SCNR
ja nee is klar :P trotzdem sind's doch die selben Abläufe ... die Status-LED blinken lassen könnte ich schon mal XD
Also, der exakte Quarz (Im Vergleich zum internen Takt) hat nur einen Grund: Hohe Genauigkeit! Ohne funktioniert mein TV-B-Gone nicht, der interne Takt ist zu ungenau. Da der Quarz (denke ich mal) auch die Timer für die IR-Led(s) steuert, geht da nichts. Anpassen an die 16MHz sollte möglich sein, zumindestens in C. Zum Portieren für Bascom habe ich keine Ahnung, allerdings wird das auch schwer werden, da man bei C, in welchem der Ursprungscode geschrieben ist, alles viel genauer machen kann. Beispielsweise wird es schwer werden, den RC5 Code Zeitgenau zu senden.
hmmmhmm wäre es dann möglich, den code in Bascom exakt zu übernehmen (geht glaube ich irgendwie, oder waren's assembler-Stücke?) Mir geht's nur darum, die Bedienung etwas zu ändern, da hab ich zu viel angst, bei gcc was falsch zu machen. wie gesagt, ich möchte den Taster auf nen anderen port legen, um das ganze abschaltbar zu machen, noch eine zusätzliche Status-LED einbauen. Eventuell die 2 Ports ändern, die im mega8-Beispiel die 48 LEDs ansteuern. Lieg ich richtig, dass beide ports gleichzeitig dasselbe machen? dann könnte ich ja entweder 3 ports nehmen bzw auch nur einen und meine 3 IR-LEDs über nur einen Transistor ansteuern. Wie auch immer. Im Beispiel werden glaube ich auch die ISP-Ports genutzt, die würd ich -wenn's sinn macht- deshalb auch nur dafür verwenden. ich wollte es so machen: schalter ein, led1 blinkt ein paar mal, erlischt nach 3 sec oder so -> Schaltung bereit Taster -> codes werden durchgeflackert (led2 blinkt wie im original) ansonsten würde ich, wenn ich weiss, wie's geht, das auch mit gcc machen, aber da hab ich 0 Erfahrung bisher.
ok, jetzt bin ich erst mal der Verzweiflung nahe ... Meine Schaltung ist soweit fertig, aber ich kann sie nicht programmieren. Ich habe allerdings alles so gemacht, wie bei vorigen Projekten, trotzdem antwortet der mega8 nicht ... Testweise hab ich mein mega128 dev-board probiert, avr-studio kann zum µC verbinden und ich kann die Fuses auslesen, der ext. Quarz schwingt. der neue mega8 bekommt einfach keine verbindung. weder mit quarz, noch mit oscillator. normalerweise müsste der doch neu mit int. 1 MHz laufen, oder? dann hab ich folgendes probiert: ich hab den mega8 nur mit folgendem aufbau an den programmer angeschlossen: http://img145.imageshack.us/img145/3955/mega8spixi4.png dasselbe problem, aber so ist es doch wie im data sheet, aber could not enter programming mode ... der mega128 ist allerdings etwas anders angeschlossen, aber ich habe alles probiert, was ich in vorigen projekten auch getan habe. auch ein 10k R zw. VCC und MOSI half nicht, an pin16 kommt nix raus (oszi-kontrolle aller leitungen) was könnte das problem sein? bestimmt irgendwas simples, hoffe ich D:
ok ich hab's gefunden ... ich musste die ISP freq von 57 khz auf 4 khz setzen, dann wurde der mega8 gefunden. ich hab mich ein wenig durch gcc gekämpft (ich finde es irgendwie unkomfortabel, sich mit make und makefile die dateien zu erstellen, aber egal) ich hab auch ein hex file und ein elf file erzeugt, mit ein paar warnungen aber ohne Fehler. das hex hab ich auf den atmega8 geknallt und es tut sich nur die Hälfte. Beim einschalten leuchtet erst mal nix. Nach dem Reset blinkt die grüne LED, das ganze dauert keine 69 sec oder so, sondern nur 19 sec, dann kommen die kurzen Blinkimpulse. am port, an dem die IR-Dioden hängen, messe ich nichts. woran kann's nun liegen? :(
so, langsam funktioniert's ... hab den code der main.c (die andere main modificat de mine.c verursacht den Fehler, den ich bisher hatte, dass nach ein paar sek alles abbricht und nix sendet) kann mir eventuell jemand kurz erklären, was auf den 2 OC-Ports passiert? ich benutze nur einen davon (PB1 über 100 Ohm Basis-Wid an fzt653 schaltet 3 IR-LEDs mit je 100 Ohm Vor-Wid.), ich nehme noch immer an, beide ports geben dasselbe signal aus? (sieht aufm oszi nicht exakt gleich aus) wenn ich nun aber den code der main.c nehme, sendet die Schaltung die IR-codes, allerdings endet das nicht nach 69 sec oder so, sondern hört nie auf! hier noch mal das angesprochene source pack: http://www.youritronics.com/wp-content/uploads/2008/10/supertvbgone-source.zip ich würde gern irgendwie folgende änderungen reinmachen: 1. schaltung einschalten, rote LED an PD6 blinkt 3 sec lang oder 10x und geht aus 2. schaltung nicht über reset starten sondern mit taster an PD7 oder PB0, sendet alle codes (grüne LED wie gehabt blinkt nach jedem code und am ende 4x schnell) 3. sleep-modus kann von mir aus wegfallen, da ich den schalter hab 4. neustart der senderoutine durch erneuten tastendruck (ist original durch erneuten reset möglich) Danke, Nik
Hallo Nik, ich glaube Du hast die Schaltung / das Programm nicht verstanden. > ich würde gern irgendwie folgende änderungen reinmachen: > 1. schaltung einschalten, rote LED an PD6 blinkt 3 sec lang oder 10x und > geht aus Tut sie doch im Original und zeigt damit den eingestellten Modus an > 2. schaltung nicht über reset starten sondern mit taster an PD7 oder > PB0, sendet alle codes (grüne LED wie gehabt blinkt nach jedem code und > am ende 4x schnell) > 3. sleep-modus kann von mir aus wegfallen, da ich den schalter hab Über Reset ist doch genial, der Ruhestromverbrauch beträgt µA's und je nach Modus geht die Schaltung nach dem Senden schlafen. Bei Deinem Wunsch must Du den Taster ja lange halten (max. 2 Minuten). > 4. neustart der senderoutine durch erneuten tastendruck (ist original > durch erneuten reset möglich) ?????? Oben schreibst Du "der hat nur 1K", ist falsch, im Original ist es ein ATtiny85 mit 8K (US und EU Code drin), oder ein ATtiny45 mit nur einem Code. Die FB-Codes sind inzwischen "gepackt" drin, die Codes "kleiner" machen ist nicht, sind sie schon. Warum willst Du einen Mega8 nehmen ?, warum 16 MHz ? Versteh doch erstmal das Projekt, versteh mal die Bedienung auch die des Stealth-Modus (ist schon trickreich) Es geht dort auch um klein in den Abmessungen. Meine Schaltung ist ca 20 x 25mm groß, darauf sind 4 IR-LED's ATTiny85,8MHz-Resonator, Taster, Modus-Led, Transistoren usw. und funktioniert prächtig. > Lieg ich richtig, dass beide ports gleichzeitig dasselbe machen? Ja, setzte Dich mal richtig mit dem Projekt auseinander. Basisstrom ! > dann könnte ich ja entweder 3 ports nehmen bzw auch nur einen und meine > 3 IR-LEDs über nur einen Transistor ansteuern. Wie auch immer. Ja, toll. Oder es so lassen wie es ist und funktioniert. Bei 3 Volt 3 LED's in Reihe ?, parallel ?, nicht die feine Art. Den Transistor für 3 x parallel wüsste ich gerne max. TO92 Gehäuse. Den nötigen Basisstrom dafür kann ein Portpin nicht bringen, deshalb die gewählte Aufteilung max. 2 Transistoren an einem Portpin. Bei 3 Volt gilt ein Transistor pro LED (max. 1 Ampere) > Im Beispiel werden glaube ich auch die ISP-Ports genutzt, die würd ich > -wenn's sinn macht- deshalb auch nur dafür verwenden. Wie oft willst Du denn flashen ? Lesen und verstehen! All Deine Fragen sind im Forum beantwortet. Mach die Basiswiderstände steckbar, rausziehen = ISP. Oder lass der 10pol Stecker weg und setz den Tiny in eine Fassung. cdg
Hallo cdg :) ich glaube, Du liest auch nicht richtig :D mir geht's auch nicht um's 1:1 nachmachen, sondern um's selbt machen und verändern. Wo bleibt sonst die Herausforderung ... >> 1. schaltung einschalten, rote LED an PD6 blinkt 3 sec lang oder 10x und >> geht aus > Tut sie doch im Original und zeigt damit den eingestellten Modus an Falsch. Im Original gibt's keine rote LED. Nur eine grüne, die nach jedem code und am Ende blinkt. Meine rote ist zusätzlich. > Über Reset ist doch genial, der Ruhestromverbrauch beträgt µA's und je > nach Modus geht die Schaltung nach dem Senden schlafen. > Bei Deinem Wunsch must Du den Taster ja lange halten (max. 2 Minuten). Ich werde das Ding ja auch jeden Tag andauernd nutzen. Warum also nicht leicht verändern und mit nem Schalter komplett von der Stromquelle trennen? Wieso muss ich den Taster lange halten, wenn das Senden durch nen low-Impuls am Port, an dem der Schalter hängt, getriggert wird? Ich schrieb nirgends, dass der Taster die Schaltung von der Batterie trennt. > Oben schreibst Du "der hat nur 1K", ist falsch, im Original ist es ein > ATtiny85 mit 8K (US und EU Code drin), oder ein ATtiny45 mit nur einem > Code. gut, irgendwo auf einer Seite stand, es wird ein tiny mit 1K genutzt und deshalb haben manche den mega8 genommen (oder sogar größere) um alle Codes mit reinnehmen zu können. > Warum willst Du einen Mega8 nehmen ?, warum 16 MHz ? Warum? weil ich keinen anderen µC hab und hier massenhaft mega8 rumliegen. Warum 16 MHz? weil ich zu diesem Zeitpunkt keinen Quarz mit 8 MHz hatte. Das war in meinem letzten Posting auch nicht mehr das Problem. Meine Schaltung ist 40x55 groß, das reicht mir auch, wobei ich die noch kleiner hätte machen können, aber ich einen meiner mega8-Sockel-Platinen genommen und die ist durch die Stiftleisten schon 21x27 > Ja, setzte Dich mal richtig mit dem Projekt auseinander. Basisstrom ! ja, was ist damit? Funktioniert recht gut, allerdings hängt's nur an einem Port. Meine Frage zu den 2 OC-Ports hast Du geschickt unbeantwortet gelassen, das hätte zu diesem Problem schon geholfen (ich hatte versuchweise den 2. OC-Port aus dem code entfernt und es ging nicht) Im 48-LED Projekt werden 4 BD139 genommen, um je 12 LEDs zu schalten. Je 2 davon hängen an einem Port. Ich nehm den FZT653 und schalte 3 parallele LEDs mit je 100 Ohm Vorwiderstand (wie ich oben schrieb). Lesen. Und das soll problematisch sein, wenn beim 48er je 2 BD139 und je 12 LEDs dranhängen? > Wie oft willst Du denn flashen ? sicher oft genug, bisher sinds auch schon 30x oder so ... Momentan ist nur noch die Firmware das Problem, siehe Posting über Deinem. schöne Grüße Nik
Prima, willst Du was anderes erreichen als das Original ? Wenn nein, Teile kaufen und gut ist. Wenn ja, dann doch mal alles lesen. Geschickt hast Du Stellen (wo Du nicht gelesen hast) übersprungen. Komprimierung usw. Wenn ich mit vorhandenen Bauteilen (statt mit den vorgeschlagenen) ein Projekt verändert (nach)bauen möchte, muss ich nicht nur die Hardwareseite sondern auch die Software (zwecks ändern) verstehen. Fragen dann wie GCC auf Bascom portieren oder war es Assembler lassen am Erfolg doch zweifeln. Irgenwann kommen dann Wünsche wie TV-xyz geht nicht aus, gibt es einen passenden Code und wie bekomme ich den dann da rein ? Oder wie funktioniert die Komprimierung usw. Ich benutze das Teil für den Zweck, für den es gedacht ist. Wenn ich das Teil für lange Zeit nicht gebrauche, kann ich ja die Batterien rausnehmen. Aber wenn die Baustelle das Ziel ist und nicht das zum Einsatz funktionierende Gerät, dann verstehe ich Deine Argumente. Hinterher kommt dann immer noch der Satz, ich habe viel dabei gelernt. > ich benutze nur einen davon (PB1 über 100 Ohm Basis-Wid an fzt653 > schaltet 3 IR-LEDs mit je 100 Ohm Vor-Wid.) gelesen habe ich das schon, ohne Spannungsangabe ist wieder mal nur raten angesagt. Ich rate mal, mit 5 Volt betrieben weil Du die rumliegen hattest. Am 100 Ohm fallen ca. 3,5 Volt ab = 35 mA pro IR-Diode = 105mA Kollektorstrom. Das geht an einem Portpin locker. Respekt, für den FZT653 (na ja, der lag halt so rum) Die Rechnung bei Ub = 3 Volt spare ich, ist noch unsinniger. Der Sinn der TV-B-GONE war unter anderem die enorme Reichweite. Um eine TV-Wand auszuschalten braucht es etwas Abstand davon und deshalb Power. > Wieso muss ich den Taster lange halten, wenn das Senden durch nen > low-Impuls am Port, an dem der Schalter hängt, getriggert wird? Ich > schrieb nirgends, dass der Taster die Schaltung von der Batterie trennt. Der neue Comfort also, Schalter ein, es blinkt und danach Taster drücken zum Senden, danach zeigt eine Lead Sendeende an und Du kannst den schalter ausschalten. > Falsch. Im Original gibt's keine rote LED. Nur eine grüne, die nach > jedem code und am Ende blinkt. Meine rote ist zusätzlich. Rot oder Grün, das ist doch Kinderkacke (Haarspalterei), falsch, blinkt nicht nach jedem Code und je nach Modus (Stealth) nie, auch nicht am Ende. Dochmal ein bisschen zur Funktion lesen ? Ist ja auch im Code drin. Gerne können wir uns weiter darüber austauschen wenn Du möchtest. Hinweise, wie Du die FB-Codes in Bascom reinbekommst kann ich machen. Dann aber per Mail um das hier nicht aufzublähen. Wegen der Größe 8K brauchst Du die Löhnversion. Ich habe für einige neuere Plasma- und LCD-Fernseher neue Codes eingebaut, nun wird es in meiner Umgebung zuverlässig dunkel. (ausgeloggt und bin weg, die Arbeit ruft) cdg
> Geschickt hast Du Stellen (wo Du nicht gelesen hast) übersprungen. > Komprimierung usw. hab ich nicht, mit Deiner Antwort hatte sich meine Vermutung bestätigt. > Wenn ich mit vorhandenen Bauteilen (statt mit den vorgeschlagenen) ein > Projekt verändert (nach)bauen möchte, muss ich nicht nur die > Hardwareseite sondern auch die Software (zwecks ändern) verstehen. richtig, alledings war das nachgebaute Projekt schon mit einem mega8 gelöst und somit musste ich nix weiter ändern. ich habe mega8 wie in der schaltung, portbeschlatung wie im original und original-code, aber es klappt nicht so 100 pro, wie es eigentlich sollte. Meine Beschreibung steht in einem meiner vorigen postings, einfach mal lesen :) > Fragen dann wie GCC auf Bascom portieren oder war es Assembler lassen am > Erfolg doch zweifeln. Bascom wäre für mich einfacher gewesen und war lediglich eine Frage, damit ich die Änderungen selbst hinbekommen kann, hätte ich nur den Bascom-geporteten code. Auf meine Frage, ob bei den 2 OC-Ports irgendwas spezielles passiert, damit ich mir das zusammenreimen kann, bist Du bisher nicht eingegangen, dafür stellst Du Dich großartig hin und versuchst einen noch dümmer zu machen. Tolle Hilfe, wenn man nichts zum Thema sagen -will-, sollte man es auch lassen. Kopieren kann jeder, Bausatz kaufen auch, dazu muss man nix können, das kann ich die Lehrling bei mir auf Arbeit machen lassen. > Irgenwann kommen dann Wünsche wie TV-xyz geht nicht aus, gibt es einen > passenden Code und wie bekomme ich den dann da rein ? Die codes findet man ganz einfach und das war hier auch nicht das Problem. > Der neue Comfort also, > Schalter ein, es blinkt und danach > Taster drücken zum Senden, danach zeigt eine Lead Sendeende an > und Du kannst den schalter ausschalten. bis auf den schalter und das zusätzliche blinken der roten LED ist das die Funktion vom origina, yup. > Rot oder Grün, das ist doch Kinderkacke (Haarspalterei), das war nur, damit du meine vorhaben besser verstehst und nicht wieder durcheinander kommst :) > falsch, blinkt nicht nach jedem Code Also wenn ich das richtig deute:
1 | for (i=0; i<num_codes; i++) { // for every POWER code in our collection |
2 | wdt_reset(); // make sure we dont get 'stuck' in a code |
3 | |
4 | quickflashLED(); // visible indication that a code is being output |
dann bedeutet das, vor jedem code blinkt die grüne LED. und
1 | // flash the visible LED on PB0 4 times to indicate that we're done
|
2 | delay_ten_us(65500); // wait maxtime |
3 | quickflashLED4x(); |
heisst, am ende blinkt's auch nochmal. Hmm? Oder doch nich? Also nochmal: Momentan ist das Problem, dass der Nachbau mit Original-code und Original-Beschaltung (nur, dass ich lediglich 1 Port belegt habe) zwar sendet, aber 1. nichts passiert (könnte an den Codes liegen) und das Senden nicht aufhört. Es werden aber codes gesendet (ich hab nen Oszi und brauch keine Brille) und die IR-LEDs flashen auch ganz gut. Vielen Dank. -_-
Habe in den letzten Tagen angefangen, den Originalcode auf Bascom zu portieren und dann diesen Thread gefunden. Gebe hier mal meinen Ansatz zum Besten. Sorry für den miserablen Code, is nur zum Testen. Läuft mit internem Oszi mit 8MHz, z.Z. nur ein Code gespeichert, funktioniert soweit mindestens für einige Phillips und Dual Geräte. Vll. hilfts einigen. Gruß, j.azz $regfile = "m8def.dat" $framesize = 32 $swstack = 10 $hwstack = 24 $crystal = 8000000 Config Portd = Output Config Portb.3 = Output Portd = 0 Dim I As Long Dim Freq As Long Dim Timerval As Long Dim Ontime As Long , Offtime As Long Waitms 20 Do Restore Dta 'load dta Do Read Freq 'read frequency Timerval = Freq - 1 Timerval = 8000000 / Timerval Timerval = Timerval / 2 Config Timer2 = Timer , Prescale = 1 , Compare = Toggle , Clear Timer = 1 Config Timer1 = Counter , Prescale = 8 Compare2 = 110 Stop Timer2 Do Read Ontime 'reads ontime Read Offtime 'reads offtime Ontime = Ontime * 9 'make it fit to timer Offtime = Offtime * 9 'make it fit to timer Portd = 1 'indicate tx by vis. led Start Timer2 'start carrier Timer1 = 0 'reset timer1 Do : Loop Until Timer1 >= Ontime 'stop if ontime has passed Stop Timer2 'stop carrier Portb.3 = 0 'carrier off Portd = 0 'vis. led off Timer1 = 0 'reset timer1 Do : Loop Until Timer1 >= Offtime 'stop if offtime has passed Loop Until Offtime = 0 'stop if end of code Waitms 250 'wait 1/4 second Loop Waitms 1000 Loop End 'end program Dta: Data 34800& Data 92& , 92& Data 92& , 92& Data 184& , 92& Data 92& , 92& Data 92& , 92& Data 92& , 92& Data 92& , 92& Data 92& , 92& Data 92& , 184& Data 92& , 92& Data 184& , 92& Data 92& , 920& Data 92& , 92& Data 92& , 92& Data 184& , 92& Data 92& , 92& Data 92& , 92& Data 92& , 92& Data 92& , 92& Data 92& , 92& Data 92& , 184& Data 92& , 92& Data 184& , 92& Data 92& , 0&
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.