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
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).
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
Also tut mir leid ich war auf der FTDIChip Seite finde aber keinen passenden SourceCode... suche ich nach was falschem?
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.
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...
Marius vielen Dank für Deine Mühe. Mit solchen Antworten kann ich was anfangen :-) Werde mich jetzt mal damit beschäftigen Danke erstmal
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.
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
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
Hi Ist es jetzt Mode geworden, Uralt-Threads auszugraben um irgend welchen Scheiss loszuwerden. MfG Spess
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.
(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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.