Forum: Mikrocontroller und Digitale Elektronik AVR-GCC auf Bascom porten (tv-b-gone) + Hardware-Fragen


von Nik (Gast)


Lesenswert?

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

von holger (Gast)


Lesenswert?

Einen Code von GCC zu Bascom zu portieren
wäre ungefähr so wie einem Auto die Reifen
abzuschrauben ;)

SCNR

von Nik (Gast)


Lesenswert?

ja nee is klar :P

trotzdem sind's doch die selben Abläufe ...
die Status-LED blinken lassen könnte ich schon mal XD

von Markus W. (feuerrot)


Lesenswert?

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.

von Nik (Gast)


Lesenswert?

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.

von Nik (Gast)


Lesenswert?

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:

von Nik (Gast)


Lesenswert?

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? :(

von Nik (Gast)


Lesenswert?

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

von Calogero D. (Firma: swissgrd.va) (cdg)


Lesenswert?

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

von Nik (Gast)


Lesenswert?

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

von Calogero D. (Firma: swissgrd.va) (cdg)


Lesenswert?

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

von Nik (Gast)


Lesenswert?

> 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. -_-

von j.azz (Gast)


Lesenswert?

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