Hallo Leute, kennt jemand von euch eventuell ein Programm, mit dem man die Software eines geflashten AVR-Kits auslesen kann? Habe in einer Woche Prüfung, und habe mein Kit zum arbeiten erst vor ein paar Tagen bekommen - zwar fuktionsfähig, aber die separat geschickte Software, die ich dokumentieren soll (und eigentlich der auf dem AVR entsprechen soll), funktioniert nicht. Auch nach mehreren Anfragen wurde mir stets die fehlerhafte Software zugeschickt. Nun möchte ich die funktionierende Software irgendwie auslesen, damit ich zumindest eine Grundlage habe zum arbeiten. Bitte um möglichst schnelle Hilfe. Vielen Dank schonmal im Voraus!! greez Captain N
es sollte kein Problein die Software mit WinAVR auzulesen, aber das hieft dir nicht weiter weil es ein HEX-File ist, selbst wenn man es noch durch den Dissassembler schiebt wirst du es nicht in einer woche verstehen ( ja nach umfang und kenntniss) Schreibe doch lieber welche Probleme ist mit der richtigen Software gibt.
Mit dem normalen AVRISP, STK200 oder ähnlichen Programmieradaptern kann man den Flash auslesen, wenn er nicht durch "Lock-Bits" gesperrt ist. Liefert aber nur Binärcode, keinen Quelltext.
Wenn die Software im AVR drin ist, kriegst du die nur dann raus, wenn keine Fusebits gesetzt sind. Sind die gesetzt, hat man mit "normalen" (= für Normalbürger bezahlbaren) Mitteln keine Chance mehr. Und wenn man was auslesen kann ist es auch nur Maschinencode ("Assembler"). Also nix mit C oder Bascom.
Perfekt wäre es auch, wenn vielleicht noch jemand eine detaillierte Ausarbeitung folgender Software herumgeistern hat. Im Anhang findet ihr meine aktuelle Software, und schließlich einen Screenshot von der stets wiederkehrenden Fehlermeldung. Meine Aufgabe ist es in erster Linie, das volle Programm detailliert und für völlig unwissende Neulinge der Materie verständlich in einer Dokumentation zu erläutern. Quasi ein Handbuch für Leute, die unterwegs "mal schnell nachblättern" möchten, um ggf einen Fehler zu finden, oder sich ggf ein wenig weiterzubilden im Umgang mit der Programmiersprache. Grundlagen habe ich schon verstanden, doch ist mir so einiges noch immer verschlossen geblieben... Vielen Dank an alle hilfsbereiten Elektroniker da draußen :-) greez Captain N Im Anhang findet ihr nun das "funktionieren-müssende" Programm für BASCOM und die Fehlermeldung, die ich stets bekomme.
Sorry, hab gar nicht damit gerechnet, dass hier so schnell geantwortet wird ^^ Habe einfach nen neuen Eintrag gemacht... Bin leider technisch gesehen der absolute Unterflieger auf dem Gebiet... Von Fusebits etc ist in dem Programm schon was enthalten. Habe aber gesehen, dass sich die BASCOM-Datei wohl nicht anhängen ließ. Darum versuche ich es hier einfach mal mit dem guten alten copy-&-paste-Verfahren ^^ Als Anhang findet ihr dann endlich die Fehlermeldung, die mir BASCOM ausspuckt. Hier nun aber das (fehlerhafte) Programm: Entschuldigt bitte, falls es Probleme mit der Formatieruung oder meiner Ausdrucksweise gibt... Werde versuchen, so exakt wie möglich auf offen bleibende Fragen zu antworten. bin wie esagt völliger Neuling auf dem Gebiet. '----------------------------------------------------------------------- -------- 'Projekt: IR Geber Funktionstester mit dem AVR Starterkit ' 'Hardware:Platine und Zubehör und Display. Jumper gemäß Schaltplan. ' auf X13 wird ein SFH5110-36 (IR Empf.IC) oder ähnl. gesteckt. ' Oszi Y1 auf DPort (X20)auf PD4 (6. von links nach rechts) ' Oszi Y2 an X28 (V7)>PhasendecoderImpuls oder (V6) entprelltes Signal. 'Aufgabe :Sämtliche Fernbedienungen mit den unterschiedlichsten Protokollen ' auf Funktion prüfen. Die Ausgabe erfolgt Akustisch und per LCD ' Display sowie über die Serielle Schnittstelle (COM)an einen PC ' 'Hinweis : ' Taste [S] selektiert die Betriebsart mit LED V5. ' V5 aus (Default) ist der Betrieb mit dem selbst entwickelten Decoder. ' V5 an ist der selektive Decoder von BASCOM nur für RC5 Code. ' Taste [R] dient nur einem Hardware Reset. 'NS081115 '----------------------------------------------------------------------- -------- $regfile = "m16def.dat" 'zu jedem Modell passende Datei '$prog &HFF , &HE4 , &HD9 , &H00 'Setzt Fusbits auf 8MHz int RC Oszil. ' I I I FBX- Fusebit eXtended ' I I FBH- Fusebit High 'JTAG = disabled ' I FB- 'intern RC Oszillator 8 MHz ' LB- LockBit $baud = 38400 'gewünschte Baudrate vorgeben 'DatenDirektionRegister Port B Ddra = &B0000_0011 Porta = &B0010_1100 Ddrb = 255 'alle PortB als Ausgang deklarieren Portb = 0 '255 'alle PullUp ein. Ddrc = &B1111_1111 'das Gleiche mit Port C (Display) Portc = &B0111_0000 'nur andere Schreibweise Ddrd = &B1100_0000 'D4+5 für LCD-LED Beleuchtung Outp. Portd = &B1111_1111 'PD4=H/PD5=L Dim I As Integer 'Variable für intern. Zähler vom Timer Dim D As Integer 'eine Integer- Variable (D) wird 'dimensioniert.Der Inhalt kann nun 'während der Laufzeit verändert werden Dim Prz As Byte 'ProtokollZähler Dim Txt As String * 8 'Stringvariable für Text Dim 3pp As Word 'Global für PulsPause Zeit in mSek Dim Baz As Byte 'BitAnzahl wenn =255 dann kein Signal Dim Bce As Word 'BinärCode des IR Signals Config Rc5 = Pind.4 'BASCOM RC5 Decoder Configurieren '------------------LCD configurieren------------------------------------------ Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , _ Db6 = Portc.6 , Db7 = Portc.7 , E = Portd.6 , Rs = Portd.7 Config Lcd = 16 * 2 Initlcd : Cls : Cursor Off '----------------------------------------------------------------------- ------ Declare Sub Uirdec(adr As Byte , Bef As Word) 'eigenes Sub deklarieren Enable Interrupts '----------------------------------------------------------------------- ---- 'hier bekommen die Ports einen selbst ernannten Namen. Meistens aus der 'Zeichnung entnommen dann hat man eine gute Wiedererkennung. S1 Alias Pind.5 'Taste [S] S2 Alias Pind.2 'Taste [2] S3 Alias Pind.3 'Taste [3] 'S4 Alias Pind.4 'Taste [R] (wegen Doppelbelegung) V7 Alias Portb.4 'linke LED der Viererkette V6 Alias Portb.5 '2. LED von links nach rechts V5 Alias Portb.6 '3. LED V4 Alias Portb.7 'rechte LED der Viererkette Ho Alias Portb.0 'Hold für Ein/Aus Mimik Of Alias Portb.1 'Off für Ein/Aus Mimik A0 Alias Porta.0 'SCL zum Testen der TWI-Buchse A1 Alias Porta.1 'SDA zum Testen der TWI-Buchse 'Irs Alias PortB.4 Ire Alias Pind.4 'IR-Empfängerdiode Upperline Lcd "IR Geber Tester " Print "IR Geber Tester " Lowerline Lcd " Nico Schweig " Print "--Nico Schweig--" + Chr(10) Waitms 1000 '----------------------------Hauptroutine------------------------------- ----- Do 'Betriebsart Entscheidung durch Taste [S] LED V5 zeigt das an. Prz = 0 Select Case V5 Case 0 'Voreingestellt (Default) Call Uirdec(baz , Bce) 'eigener Decoder aufrufen- Case 1 Getrc5(baz , Bce) 'wenn V5 an, dann BASCOM RC5-Decoder Bce = Bce And &B01111111 'filtert TogleBit heraus. End Select 'in BAz steht Geräteadresse(TV/SAT/HiFi) If Baz < 255 Then 'Wenn Decoder anspricht ist BAz < &HFF Incr D 'dann wird eine Ausgabe gemacht Incr Prz Select Case V5 Case 0 Txt = Str(3pp) + " mS" If Baz => 50 And Bce => 99 Then Txt = "DENON" If Baz < 50 And 3pp => 52 Then Txt = "SIRCS" If Baz = 10 And 3pp < 12 Then Txt = "RC5/Moto" If Baz = 11 And 3pp < 12 Then Txt = "RC5/Moto" If Baz = 12 And 3pp < 12 Then Txt = "RC5/Moto" Case 1 Txt = "RC5" End Select 'IF 3PP < 19 then Txt="SIRC" 'IF 3PP > 99 then Txt="DENON" Cls Upperline : Lcd "Code:" ; Txt Lowerline : Lcd Baz ; "Bit/Data" ; Bce Print "Messung: " ; D Print Bin(baz) ; " / " ; Bin(bce) Print Baz ; " Bit/Data: " ; Bce Print "Protokoll: " ; Txt Print Chr(10) End If 'Tasterabfrage mit Entprellung durch "Debounce" Debounce S1 , 0 , Tast1 , Sub 'S1 ["1"] Debounce S2 , 0 , Tast2 , Sub 'S2 ["2"] Debounce S3 , 0 , Tast3 , Sub 'S3 ["3"] Loop '---------------------Ende der Hauptroutine---------------------------------- 'Alles an Programmiercode, was hiernach folgt, sind Nebenroutinen in die der 'Mikrocontroller entweder von sich aus (Interrupt,Timer u.s.w) springt, oder 'durch ein Ereignis (Debounce,Sub- oder Funktion u.s.w) ausgelöst wird. Nach 'der Abarbeitung der Unterroutinen springt der Mikrocontroller immer wieder 'an die Stelle zurück, von der aus er ausgetreten ist. Tast1: V5 = Not V5 Return Tast2: Select Case V5 Case 0 Print "Uni Decoder V0812" Lowerline : Lcd "UniDecoder V0812" Case 1 Print "RC5 Decoder 7.8.1" Lowerline : Lcd "RC5 Decoder7.8.1" End Select Return Tast3: Select Case V5 Case 0 Print "Fernsehzentrale KH" Case 1 Print "Fernsehzentrale KH" End Select Return Sub Uirdec(adr As Byte , Bef As Word) Local 1mz As Word '1. Monostabiler Zähler (Puls/Pausen) Local 3mz As Word , 3su As Word '3.Mono & Summe Taktrate Dim Tar(50)as Word 'Timer Array (Impulsweite) Local Byw As Word 'Bit Wertigkeit Local Bis As Byte 'BiStabiler Schalter f.Entprellung If Ire = 1 Then 'Vorabfrage des IR-Eingangspin Adr = &HFF 'wenn kein Signal ansteht Exit Sub 'sofort wieder beenden. End If Const 1mt = 900 '1.MonoTime für Puls/Pausenerkennung Bis = 0 'Bist.Schalter auf Null=L(IRE)gesperrt 1mz = 0 : 3mz = 0 'alle Zähler zurück setzen Byw = 1 'Niederwertigstes Bit 8192=14Bit(RC5) V7 = 1 'LED7 zu Testzwecken mit Scope 3pp = 0 'Summe Adr = 0 Bef = 0 'ab hier beginnt die eigentliche Routine Do 'System verharrt in Do-Loop Schleife 'bis Until- Bedingung erfüllt 'pro Durchlauf 33µS Incr 1mz 'Puls/Pausenkennung (Monost.Multiv.) Incr 3mz 'Impulsbreitenmessung Select Case Ire 'IR EingangsPin selektieren Case 0 If Bis = 1 Then 'Bistabiler Zustand, verhindert Bis = 0 'mehrfachschalten. 1mz = 0 'Puls/Pausen- Reset V7 = 0 : For I = 1 To 15 : Next I : V7 = 1 'nur zur Indikation für Oszi Incr Adr 'Array-Zähler der Impulse Tar(adr) = 3mz : 3pp = 3pp + 3mz 'Impulsbreite in Array+Summe ermitteln 3mz = 0 'Zähler Reset End If 'Ende der negativen Flanken Steuerung. Case 1 If Bis = 0 Then 'Pos. Flankenschalter. Bis = 1 1mz = 0 'Puls/Pausen- Reset End If 'Ende der pos. Flankensteuerung. End Select Loop Until 1mz => 1mt 'wenn überläuft, dann Ausstieg V7 = 1 : For I = 1 To 35 : Next I : V7 = 0 'nur zur Darstellung der Pausenerkennung 3mz = 3pp / Adr 'arithmetisches Mittel For I = 1 To Adr 'das Array durchlaufen lassen Bis = Adr -i : Bis = Bis + 1 'das letzte Bit war das Niedrigste, If Tar(bis) => 3mz Then Bef = Bef + Byw 'deshalb addieren wir das höchste Bit 'Print I;"/";Bis;"/";ByW 'mit dem niederwertigsten BitWert und Byw = Byw * 2 'multiplizieren immer ein Bit höher. Next I Byw = Byw * 2 : Bef = Bef + Byw 'das hochwertigste Bit zusetzen(immer 1) 3pp = 3pp - 1mt 'ermittelte Zeit noch PP-Zeit abziehen. 3pp = 3pp / 43 'die Anzahl der Takte/ Zeitfaktor 'der empirisch ermittelt wurde und von 'der Taktfrequenz abhängig ist. End Sub End
Es brennt mir unter den Fingernägeln und ich kanns nicht mehr zurückhalten > Quasi ein Handbuch für Leute, die unterwegs "mal schnell nachblättern" > möchten, um ggf einen Fehler zu finden, oder sich ggf ein wenig > weiterzubilden im Umgang mit der Programmiersprache. Find ich irgendwie witzig, wenn man bedenkt dass du selbst keine oder kaum Ahnung hast und das ganze in einer Woche fertig sein soll.
das is ja eben das Problem an de rsache. Habe mein Kit wie gesagt auch erst vor ein paar Tagen bekommen, nachdem ich meinem Prüfer monatelang deswegen hinterhergelaufen bin. Und alles, was ich von ihm zur Unterstützung in Form seiner ach so gut gemeinten nützlichen Ratschläge bekomme, war für die Katz. Beinahe wär mir dabei sogar mein AVR abgeraucht. Aber der Fehler liegt nun tatsächlich nicht an mir selbst. Es gibt genügend Leute, die gleiches bezeugen können ;-)
du hast nicht die gleiche bas datei! die im Anhang hat 251 Zeilen. Bei dir kommt in screenshot "Durchlaufzeit" vor in der bas datei steht das nicht drin.
stimmt, jetzt seh ichs. Ist mir in der Hektik wohl tatsächlich entfallen. Ok, hab mir nochmal die aktuellen Daten rausgezogen, und hänge sie an dieser Stelle nochmal mit an. Zuerst die BASCOM-Datei, an der ich arbeiten soll, und im Folge-Eintrag dann die aktuelle Fehlermeldung. Ist sich allerdings noch immer ziemlich ähnlich. Habe bisher nirgends einen Hinweis gefunden, was es mit diesem "Label not found" auf sich hat. Gelegentlich erscheint aber auch eine völlig andere Fehlermeldung "assignment error" mittendrin irgendwo. Aber auch unregelmäßig. wenn ich die nochmal bekomme, häng ich die auch ma mit an. => Die BASCOM-Datei ist mit "rar" gepackt. Ich sende einfach mal den kompletten Anhang, den ich in meiner E-Mail bekommen habe. Vielleicht sind ja von den zusätzlich enthaltenen Dateien welche zur Fehlersuche nötig.
...und die aktuelle Fehlermeldung, von dem zuvor angefügten BASCOM-Programm
>Find ich irgendwie witzig, wenn man bedenkt dass du selbst keine oder >kaum Ahnung hast und das ganze in einer Woche fertig sein soll. So funktioniert es doch überall. Leute die keine Ahnung aber dafür ein umso größeres Ego haben, besetzen Schlüsselpositionen und zeigen anderen wo es langgeht. Geballtes Halbwissen sach ich da immer.
Was mir da schon mal auffällt: Sind in Bascom Variablennamen erlaubt, die mit einer Zahl beginnen?
Bin kein BASCOM Profi. Aber deine Fehlermeldungen hängen offnebar mir diesen Zeilen zusammen ... Adr = &HFF 'wenn kein Signal ansteht ... Adr=0 ... HIer kommt sowohl &HFF als auch 0 vor, die beide als 'Label not found' markiert sind. Nun ist das hier eine Zuweisung an etwas was sich Adr nennt. Und Adr wiederrum stinkt nach irgendeinem vordefinierten Schlüsselwort im Zusammenhang mit dem ADC. Mach mal folgendes Ändere das Adr um in Addr. Ist sowieso die richtigere Schreibweise. Address schreibt sich im Englischen mit 2 d Sub UIRDec (Addr AS BYTE ,Bef as Word) ... Addr = &HFF ... Addr = 0 und wo halt Adr sonst noch so vorkommt in dieser Funktion. (Das ist jetzt allerdings ein vollkommener Schuss ins Blaue. Also mehr geraten als durch Wissen hervorgebracht)
Jaecko wrote: > Was mir da schon mal auffällt: Sind in Bascom Variablennamen erlaubt, > die mit einer Zahl beginnen? Find ich auch seltsam, hab danach gegoogelt und auch anderen Code gefunden, bei dem das benutzt wird. Dürfte anscheinend erlaubt sein.
Möglicherweise ist die eigentliche Prüfung nicht die Erstellung einer Doku, sondern es soll herausgefunden werden, ob derjenige in der Lage ist einen Programmfehler zu finden und wie lange es dauert bis er es selber macht, statt immer nach dem richtigen Code zu fragen. Mach Deine Hausaufgabe mal lieber alleine. Da lernt man auch was dabei.
ok, ich werde das mal ausprobieren mit dem "addr." Der Prüfer weiß sehr genau, wie die Kriterien bei mir sind, und haben uns deshalb eben auf dieses doch recht einfache Projekt geeinigt. Weil er es immer und immer wieder verbacken hatte, es mir mitzubringen, und so die Zeit knapp wurde, hat er sich bereit erklärt, die Software zu programmieren, sodass ich "lediglich" nur noch dokumentieren müsse. Und wie gesagt, die Software auf dem AVR funktioniert ja auch einwandfrei... Nur die, die er mir zugeschickt hat, eben nicht. Zum Glück konnte ich die auf dem AVR eines Kollegen ausprobieren. Ich kenne den Mann gut genug, um ihm zu misstrauen... Naja, und dabei kam eben heraus, dass es nicht funktionierte. Nach weiterem Hin- und Her per E-Mailhabe ich dann nun endlich diese Software bekommen - immer noch fehlerhaft. Wenn ich eine Möglichkeit hätte, meine funktionierende Software von meinem AVR auszulesen und zu sichern, könnte ich ja auch eigenständig experimentieren und ausprobieren. Aber wenn ich das Programm jetzt drauf flashe, ist die funktionierende Version ein für allemal verloren... So habe ich wenigstens ein funktionierendes Stück, das ich vorweisen kann.
egtl Gesellenprüfuung ^^ Hab nur eben auf dem Ausbildungsweg nicht wirklich was in der Richtung gemacht. Is alles ne lange Geschichte... Der Beruf liegt mir allerdings nicht so wirklich. Will nur nicht so kurz vor Abschluss abbrechen. Vielleicht pack ichs ja doch noch. Muss jetz erstmal in die Firma fahren, bin heute Abend aber wieder hier
du kannst ja ausgelesene Software auf jeden fall speichern, sie hilft dir zwar nicht weiter, aber im notfall kannst du sie wieder zurückspielen.
Nico S. wrote: > Weil er es immer und immer wieder verbacken hatte, es mir mitzubringen, > und so die Zeit knapp wurde, hat er sich bereit erklärt, die Software > zu programmieren, sodass ich "lediglich" nur noch dokumentieren müsse. Nochmal langsam zum Mitschreiben: Weil der Pruefer verpennt hat, dir die Aufgabe zu geben, macht er sie zum groessten Teil selbst und du machst nur noch ein bisschen Alibi-Arbeit? Was heute so alles legal ist...
Ich weiß ja nich ob dus siehst und ob das gewollt ist, aber ADR ist blau hinterlegt -> KEINE Variable.. D.h. ADR ist ein Bascom Befehl. Somit kann man da nix mit ADR as Byte definieren.. nenn das mal um.. Was ADR is findest du raus wenn du auf ADR und F1 klickst
"ADR" ist ein reservierter Befehl, den man nicht als Variablennamen benutzen darf. Ich habe "ADR" mal im ganzen Programm durch "Horst" ersetzt. ;-) Damit läßt sich das Programm fehlerfrei übersetzen. MfG Paul
@ Karl heinz Buchegger: Vielen Dank für den Tipp mit dem Umbenennen. Habe es eben mal umgeschrieben, und jedes "Adr" in "Addr" umgewandelt - und auf einmal ließ sich das Prgramm compilieren :-) Grundlegend hat das also schonmal funktioniert. Was mir allerdings noch aufgefallen ist, ist das Ergebnis, das er ausspuckt. Es hat wohl irgendwas mit den Interrupts zu tun, dass das Programm erkennt, ob eine Taste gedrückt gehalten wird, oder nicht. Wird sie nur kurz gedrückt, erscheint der jeweilige Code im Display. Wird sie gedrückt gehalten, springt der angezeigte Code stets zwischen 2 Werten hin und her. Eigentlich sollte die Differenz durch die bereits vordefinierten Bits stets 128 betragen. Sprich, wenn im Display nach Tastendruck der Code "3" erscheint, springt er bei Gedrückthalten der Taste ständig zwischen "3" und "131" hin und her, also quasi "3+128". Da muss also noch irgendwo was gefeilt werden. Werde mich jetzt aber schonmal dran setzen können, und mich in diese Programmiersprache einarbeiten, um zu begreifen, was jeder einzelne Befehl genau zu bedeuten hat. Sollten weitere Fragen aufkommen, werde ich sie hier posten. Vielen Dank auf jeden Fall schonmal an alle, die so fleißig mitgeholfen haben, die Fehlerursache ausfindig zu machen :-) Messen kann ich an dem Teil leider gar nichts, da ich zuhause über keinerlei Werkzeug verfüge, mit dem ich daran arbeiten könnte. Aber ich habe mal in meinen Unterlagen gekramt, und einen Schaltplan ausfindig gemacht. (siehe Anhang, is ne TARGET 3001 - Datei) So auf den ersten Blick denke ich mal, dass das so stimmt. Morgen is mein letzter Berufsschultag, und danach werd ich mit nem Kumpel nochma an der Software werkeln. Wenn ich also hier reinschauen werde morgen, dann frühestens wieder zur Abendzeit.
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.