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


von Daniel (Gast)


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_content&task=view&id=159&Itemid=57

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

von Lupin (Gast)


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

von Daniel (Gast)


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

von Daniel (Gast)


Lesenswert?

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

von Daniel (Gast)


Lesenswert?

Hat keiner einen Tipp für mich?

von interessent (Gast)


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.

von Marius S. (lupin) Benutzerseite


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/RS232/MSCOMM.htm

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

von Daniel (Gast)


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

von Gast (Gast)


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.

von Chriz X. (tc-maxx)


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

von Chriz X. (tc-maxx)


Angehängte Dateien:

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

von spess53 (Gast)


Lesenswert?

Hi

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

MfG Spess

von Florian S. (der_picknicker)


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.

von Chriz X. (tc-maxx)


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

von Michael (Gast)


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

von Chriz X. (tc-maxx)


Lesenswert?

Hallo Michael,

versuch's mal damit ;)

VG

1
Private Sub cmd_Upload_Click()
2
     Dim tmp As Integer
3
    
4
     If FileExists(txt_File) = False Then
5
        Add_Item "Datei: " & txt_File & " existiert nicht"
6
        Exit Sub
7
     End If
8
    
9
    On Error GoTo Port_error
10
    With MSComm1
11
        .CommPort = Combo1
12
        .Handshaking = 2 - comRTS
13
        .RThreshold = 1
14
        .RTSEnable = True
15
        .Settings = "57600,n,8,1" 
16
        .SThreshold = 1
17
        .PortOpen = True   
18
    End With
19
    On Error GoTo 0   
20
    
21
    Dim data As String
22
    Dim block As Byte
23
    Dim block_gesamt As Byte
24
    Dim i As Integer
25
    Dim ii As Single
26
    Dim ReadByte As String
27
    Dim Retry As Byte
28
    
29
    Const Nak = &H15
30
    Const Ack = &H6
31
    Const Can = &H18
32
33
    Read_File_to_Array (txt_File)                     
34
    
35
    Add_Item "Chr(128) senden..."    
36
37
    For i = 600 To 1 Step -1
38
        MSComm1.Output = Chr(123)                       ' Initbyte senden
39
        
40
        For ii = 1 To 1000
41
           ReadByte = MSComm1.Input
42
           If ReadByte = Chr(123) Then GoTo got_123
43
        Next ii
44
        
45
        If i = 1 Then
46
            Add_Item "Reset nicht erkannt!"
47
            GoTo ende:
48
        End If
49
    Next i
50
51
got_123:
52
    ReadByte = ""   ' Buffer löschen
53
    Add_Item "Chr(128) empfangen"
54
55
    For ii = 1 To 100000
56
        ReadByte = MSComm1.Input
57
        If ReadByte = Chr(Nak) Then GoTo got_Nak
58
    Next ii
59
    GoTo ende
60
61
got_Nak:    
62
   block_gesamt = UBound(B) / 128
63
64
Block_nochmal:
65
        For i = 1 To UBound(B) Step 128
66
            block = block + 1
67
68
            data = ""
69
            Bcsum2 = 1                   
70
            Bcsum1 = 255 - block ' Komplement
71
            Bcsum2 = Bcsum2 + block
72
            ueberlauf
73
            Bcsum2 = Bcsum2 + Bcsum1
74
            ueberlauf
75
            
76
            For ii = i To i + 127
77
                data = data & Chr(B(ii)) 
78
                Bcsum2 = Bcsum2 + B(ii)
79
                ueberlauf                
80
            Next ii
81
            
82
            Add_Item "sende 'Start Of Header-Byte' Chr(1)"
83
            MSComm1.Output = Chr(1)                 'send Start Of Header
84
            
85
            Add_Item "sende Blocknummer: " & Str(block)
86
            MSComm1.Output = Chr(block)
87
            
88
            Add_Item "sende 1. Checksummen-Byte:" & Str(Bcsum1)
89
            MSComm1.Output = Chr(Bcsum1)
90
            
91
            Add_Item "sende Datenblock (128Byte)"
92
            MSComm1.Output = data
93
            
94
            Add_Item "sende 2. Checksummen-Byte:" & Str(Bcsum2)
95
            MSComm1.Output = Chr(Bcsum2)     ' Bcsum2
96
            
97
            For ii = 1 To 100000
98
               ReadByte = MSComm1.Input
99
               
100
               If ReadByte = Chr(Ack) Then
101
                    Add_Item "Ack :)"
102
                    Exit For                 ' nächster Block
103
                End If
104
               
105
               If ReadByte = Chr(Nak) Then
106
                    Add_Item "Nak :("
107
                    If Retry = 10 Then GoTo Abort
108
                    Retry = Retry + 1        ' Block noch mal
109
                    block = block - 1
110
                    GoTo Block_nochmal
111
               End If
112
               If ii = 100000 Then GoTo Abort    ' fehler!!
113
            Next ii
114
            
115
        Next i
116
    Add_Item "sende 'End of transmitted'"
117
    MSComm1.Output = Chr(4)     ' EOT (End of transmitted)
118
    
119
    Add_Item "Erfolgreich geflasht!"
120
GoTo ende
121
Exit Sub
122
'--------------------------------------------------------------------------
123
Abort:
124
    MSComm1.Output = Chr(Can)   ' abbruch senden
125
    Add_Item "Retry error!"
126
    
127
ende:
128
    cmd_Upload.Enabled = True
129
    cmd_Search_File.Enabled = True
130
    lbl_info.Visible = False
131
    MSComm1.PortOpen = 0
132
    Exit Sub
133
    
134
Port_error:
135
    MsgBox "Fehler beim öffnen des COM-Ports"
136
End Sub
137
138
Public Sub ueberlauf()
139
    If Bcsum2 > 255 Then Bcsum2 = Bcsum2 - 256     ' Überlauf von Byte
140
End Sub

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.