mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SourceCode (VB) zum Flashen von Atmegas gesucht


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich hoffe das Thema passt hier hinein ansonsten unter 
PC-Programmierung...

Ich suche einen SourceCode (Quelltext) in Visual Basic womit ich über 
die USB-Schnittstelle einen ATmega flashen kann.

Es soll SourceCode sein weil ich die Optik des Programmes an meinen 
wünschen anpassen möchte.


Man muß sich das so vorstellen, ich will die Platine mit dem Atmega in 
einem Gehäuse haben wo ich ein USB Kabel anschließe. Und dann über ein 
kleines Programm die Firmware flashen kann.

Das Programm soll "Idiotensicher" gemacht werden. So daß keine 
Kenntnisse über Programmierung vorhanden sein müssen.

Einfach Programm starten und dann auf "Update" klicken.

Jetzt habe ich herausgefunden das ich ein Bootloader im Atmega brauche, 
okay ist klar.

Habe auch den MSC Bootloader siehe:
http://www.mcselec.com/index.php?option=com_conten...

So in der Art möchte ich das Programm aufbauen.

Hat da jemand ein SourceCode für mich oder weiß wo nach ich suchen muß?

Habe die ganze Nacht erfolglos gegoggelt aber wahrscheinlich nach 
falschen Stichpunkten?


Um verwendbare Hilfe wäre ich sehr sehr dankbar.

Gruß
Daniel

Autor: Lupin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Junge junge... der MSC Bootloader ist für die serielle schnittstelle 
(UART/rs232).

Also wenn du per USB flashen willst brauchst du erstmal einen 
USB<->rs232 wandler.

Ich hoffe mal das war dir sowieso schon klar. Dann schickst du über den 
wandler einfach das, was der bootloader auf der rs232 schnittstelle 
erwartet. Die Treiber für die USB<->rs232 wandler (die auf dem Rechner 
installiert sein müssen!) emulieren meistens einen COM-Port den du in VB 
mit den normalen COM-Port Funktionen öffnen kannst.

Auf http://www.ftdichip.com/ gibt es auch Visual Basic beispiele um 
deren USB<->rs232 wandler an zu sprechen. Was dein bootloader an Daten 
haben will das musst du schon selbst raus finden.

Sorry aber deine Frage ist typisch BASCOM-Nutzer (ist keine Beleidigung, 
nur eine Feststellung).

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nee sehe ich auch nicht als Beleidigung an aber das schärfste ist... ich 
benutze kein BASCOM ! Sondern AVR Studio :-)


Sorry hatte ich vergessen zu erwähnen das

Ich über USB--> FTDI 232BL Chip ---> Daten in mein Atmega flashen will

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also tut mir leid ich war auf der FTDIChip Seite finde aber keinen 
passenden SourceCode... suche ich nach was falschem?

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat keiner einen Tipp für mich?

Autor: interessent (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tipp:
Usbasp zusammenbaun, das als ganz normales Programmiergerät verwenden. 
Du hast dann zusätzlich zu deinem eigentlichen µC, der auch programmiert 
werden soll, einen AtMega8, welcher das Programmieren des anderen µC 
vornimmt.
Als Programm dafür, kann man zum einen selbst etwas schreiben, da das 
usbasp-protokoll public ist.
Andere Möglichkeit wäre, avrdude zu verwenden (in WinAVR enthalten). 
Dieses könnte man dann mit einfachen Kommandozeilenbefehlen steuern. 
Soll heissen, dein VB-Programm müsste dann eben avrdude starten, welches 
dann den Programmiervorgang steuert.

Autor: Marius S. (lupin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also erstmal brauchst du einen VCP Treiber für deinen FT232:
http://www.ftdichip.com/Drivers/VCP.htm

Dann hast du den FT232 als COM-Schnittstelle in der Systemsteuerung.

Eine COM-Schnittstelle lässt sich in VB über MSComm öffnen. Das geht 
relativ schmerzlos...

http://www.the-starbearer.de/Praxis/ElektronikamPC...

Schau dir die Seite mal an und google evtl. nach mehr infos über MSComm. 
Ich bin mir sicher du wirst ein Beispiel finden wie du Daten damit 
senden kannst.

Jetzt machst du folgendes:

a) Du schaust welche Baudrate der MSC Bootloader haben will und 
initialisiert deinen COM-Port mit der richtigen Baudrate, Parität und 
Stopbits (ich denke mal der wird keine Parität und kein Stopbit 
benutzen)

b) Du sendest über deinen virtuellen COM-Port die Firmware zum 
Bootloader

Das Problem ist, dass ich nicht genau weiss wie der bootloader 
funktioniert, sonst könnte ich dir mehr sagen... Aber ich bin mir sicher 
du bekommst das schon hin.

Das VB Beispiel was ich meinte war natürlich für den D2XX Treiber 
(sorry). Dieser Treiber emuliert keinen virtuellen COM-Port und wird 
über eine DLL vom Programm angesprochen soweit ich mich erinnern kann. 
Die VB Beispiele findest du hier:

http://www.ftdichip.com/Projects/CodeExamples/VB.htm

Du kannst das natürlich auch mit den D2XX Treiber machen, ist aber nicht 
ganz so einfach wie mit VCP. Aber der ist auch gut dokumentiert...

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marius vielen Dank für Deine Mühe.

Mit solchen Antworten kann ich was anfangen :-)

Werde mich jetzt mal damit beschäftigen

Danke erstmal

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum Bascom Bootloader:
Zuerst wird vom PC ständig eine 123 zum Controller gesendet.
Erkennt der Controller die 123, sendet er sie zum PC zurück.
Nach diesem "Handshaking" wird die Datei dann per Xmodem gesendet.
Wenn du die "123 Abfrage" im Controller rausnimmst, und den Bootloader 
per Taster etc. startest, dann geht das mit jedem Terminalprogramm, das 
Xmodem unterstützt, zB. Hyperterminal.

Autor: Chriz X. (tc-maxx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel schrieb:
> Mit solchen Antworten kann ich was anfangen :-)
> Werde mich jetzt mal damit beschäftigen

Hi,
ich bin auch gerade auf der Suche nach einem VB6-Code mit dem ich mein 
Programm via den MSC Bootloader in den µC bekommen.

Hast du was erreichen können ?

Gruß MaXX

Autor: Chriz X. (tc-maxx)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe mich mal an einen UpLoader für den 'MSC Bootloader' gemacht.

Das Handshake funktioniert... (dies war ja auch nicht schwer) aber mit 
der Checksumme habe ich Probleme.. ich bekomme immer wieder ein Nak :(

Der Source ist in VB6, geht aber auch als VBA in Excel.
Den Bootloader habe ich auch mal angehangen (Booloader funktioniert via 
Bascom)

Hat jemand eine Ahnung was ich verkehrt mache?

Gruß
MaXX

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ist es jetzt Mode geworden, Uralt-Threads auszugraben um irgend welchen 
Scheiss loszuwerden.

MfG Spess

Autor: Florian Schütte (der_picknicker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:
> Hi
>
> Ist es jetzt Mode geworden, Uralt-Threads auszugraben um irgend welchen
> Scheiss loszuwerden.
>
> MfG Spess

Was ist denn dein Problem? Für mich scheint es eher Mode zu sein, hier 
grundlos Leute anzumachen. Lese schon lange Zeit alles mögliche hier mit 
und sehe dauernd sowas.

Chriz hat doch nichts falsch gemacht. Es geht ihm um genau dieses Thema, 
er hat daszu eine Frage und an seinem 2. Post kann man doch sehen, dass 
er sich aktiv damit beschäftigt. Warum sollte dann dieser alte thread 
nicht weitergeführt werden?

Soll er liber einen nuen aufmachen um dort zu diesem Thema Fragen zu 
stellen? Dann wär von dir oder anderen "Gleichgesinnten" wieder nur eine 
- ich nenns mal "miese Anmache" - gekommen, die auf die Suche verweist.

Schrecklich sowas...tut mir leid für dich Chriz...was konstruktives zu 
deiner Frage hab ich leider nicht beizutragen, aber ich wollt das mal 
loswerden, da mich Leute wie Spess einfach aufregen.

Autor: Chriz X. (tc-maxx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(Hi Florian,
da kann ich dir nur zustimmen! Sollte denn wirklich ein neuer Thread 
geöffnet werden um ein bekanntes Problem zu lösen? NEIN!
Hätte ich dies allerdings doch getan, dann wäre bestimmt auch so ein 
ganz schlauer Gast gekommen und hätte mich belehrt, dass es dieses Thema 
schon gibt und die Suche genutzt werden soll.)

Jedenfalls habe ich das Problem nun gelöst. Man benötigt gar keine 
komplizierte CRC-(X-Modem)-Berechnung.

Gruß MaXX

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Maxx,

kannst du mal kurz erklären, wie du das Problem gelöst hast?
Versuche auch gerade einen VB Bootloder Flasher zu basteln....

Gruß
Michael

Autor: Chriz X. (tc-maxx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael,

versuch's mal damit ;)

VG

Private Sub cmd_Upload_Click()
     Dim tmp As Integer
    
     If FileExists(txt_File) = False Then
        Add_Item "Datei: " & txt_File & " existiert nicht"
        Exit Sub
     End If
    
    On Error GoTo Port_error
    With MSComm1
        .CommPort = Combo1
        .Handshaking = 2 - comRTS
        .RThreshold = 1
        .RTSEnable = True
        .Settings = "57600,n,8,1" 
        .SThreshold = 1
        .PortOpen = True   
    End With
    On Error GoTo 0   
    
    Dim data As String
    Dim block As Byte
    Dim block_gesamt As Byte
    Dim i As Integer
    Dim ii As Single
    Dim ReadByte As String
    Dim Retry As Byte
    
    Const Nak = &H15
    Const Ack = &H6
    Const Can = &H18

    Read_File_to_Array (txt_File)                     
    
    Add_Item "Chr(128) senden..."    

    For i = 600 To 1 Step -1
        MSComm1.Output = Chr(123)                       ' Initbyte senden
        
        For ii = 1 To 1000
           ReadByte = MSComm1.Input
           If ReadByte = Chr(123) Then GoTo got_123
        Next ii
        
        If i = 1 Then
            Add_Item "Reset nicht erkannt!"
            GoTo ende:
        End If
    Next i

got_123:
    ReadByte = ""   ' Buffer löschen
    Add_Item "Chr(128) empfangen"

    For ii = 1 To 100000
        ReadByte = MSComm1.Input
        If ReadByte = Chr(Nak) Then GoTo got_Nak
    Next ii
    GoTo ende

got_Nak:    
   block_gesamt = UBound(B) / 128

Block_nochmal:
        For i = 1 To UBound(B) Step 128
            block = block + 1

            data = ""
            Bcsum2 = 1                   
            Bcsum1 = 255 - block ' Komplement
            Bcsum2 = Bcsum2 + block
            ueberlauf
            Bcsum2 = Bcsum2 + Bcsum1
            ueberlauf
            
            For ii = i To i + 127
                data = data & Chr(B(ii)) 
                Bcsum2 = Bcsum2 + B(ii)
                ueberlauf                
            Next ii
            
            Add_Item "sende 'Start Of Header-Byte' Chr(1)"
            MSComm1.Output = Chr(1)                 'send Start Of Header
            
            Add_Item "sende Blocknummer: " & Str(block)
            MSComm1.Output = Chr(block)
            
            Add_Item "sende 1. Checksummen-Byte:" & Str(Bcsum1)
            MSComm1.Output = Chr(Bcsum1)
            
            Add_Item "sende Datenblock (128Byte)"
            MSComm1.Output = data
            
            Add_Item "sende 2. Checksummen-Byte:" & Str(Bcsum2)
            MSComm1.Output = Chr(Bcsum2)     ' Bcsum2
            
            For ii = 1 To 100000
               ReadByte = MSComm1.Input
               
               If ReadByte = Chr(Ack) Then
                    Add_Item "Ack :)"
                    Exit For                 ' nächster Block
                End If
               
               If ReadByte = Chr(Nak) Then
                    Add_Item "Nak :("
                    If Retry = 10 Then GoTo Abort
                    Retry = Retry + 1        ' Block noch mal
                    block = block - 1
                    GoTo Block_nochmal
               End If
               If ii = 100000 Then GoTo Abort    ' fehler!!
            Next ii
            
        Next i
    Add_Item "sende 'End of transmitted'"
    MSComm1.Output = Chr(4)     ' EOT (End of transmitted)
    
    Add_Item "Erfolgreich geflasht!"
GoTo ende
Exit Sub
'--------------------------------------------------------------------------
Abort:
    MSComm1.Output = Chr(Can)   ' abbruch senden
    Add_Item "Retry error!"
    
ende:
    cmd_Upload.Enabled = True
    cmd_Search_File.Enabled = True
    lbl_info.Visible = False
    MSComm1.PortOpen = 0
    Exit Sub
    
Port_error:
    MsgBox "Fehler beim öffnen des COM-Ports"
End Sub

Public Sub ueberlauf()
    If Bcsum2 > 255 Then Bcsum2 = Bcsum2 - 256     ' Überlauf von Byte
End Sub


Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.