PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : myavr - Programmer



martin66119
10.12.2012, 14:55
Hallo,

seit ein paar Tagen bin ich wieder dabei mein MC-Board zu quälen. Das ein oder andere klappt dank der Hilfe hier auch schon wieder. Nur eins stört mich.

Die Übertragung des Programms vom Rechner auch den Controller ist sehr langsam.

Ich verwende Bascom und myAVR Board MK2 (http://shop.myavr.de/index.php?sp=article.sp.php&artID=41).

Wenn ich mit dem Bascom-Tool - Options - Programmer wähle kommt immer die Meldung

"This is a very old AN910programmer #13#13 Please select myavr Programmer.

Was kann ich tun, damit die übertragen schneller geht.

Grüße
und
Danke

Martin

dussel07
10.12.2012, 15:20
Nimm das MyAVR Progtool!

martin66119
10.12.2012, 16:10
Zuerst einmal vielen Dank!

Bei mir gibt es nur myAVR MK2/AVR910. wenn ich diesen wähle passiert aber nichts. einen weiteren der mit my... anfängt habe ich nicht zur auswahl

HeXPloreR
10.12.2012, 16:30
Du könntest noch die baudrate prüfen...und ggf auf z.b 19200 einstellen, falls noch nicht. Möglicherweise hast Du auch noch die erase warung aktiviert...kann man auch abschalten wenn man sie nicht benötigt.

In den Einstellungen wählst du einmalig den programmer aus... brennen machst du über den grünen Chip - Icon (F4) nachdem compiliert hast (F7).

dussel07
10.12.2012, 16:35
Anders gesagt:
Schreibe Dein Programm mit Bascom - compiliere es - lade es in den Mikrokontroller mit dem myavr Progtool (http://shop.myavr.de/index.php?sp=download.sp.php&suchwort=dl112)(ist ein Programm) -- nicht mit Bascom.

HeXPloreR
10.12.2012, 16:50
das was dussel07 vorschlägt macht man allerdings wirklich nr in der notsitiation wenn der programmer nu garnicht will....deiner scheint ja aber zu laufen.

Wahrscheinlich stellst du immer wieder neu ein? Das braucht man nicht, einmal dort einstellen mit Meldung das er alt ist, und dann ist gut. Flashen über den grünen Chip - Icon.

martin66119
10.12.2012, 18:47
Ich benutze den "Grünen Chip" Button.

Von dem Seite myAVR habe ich mir das Toll zum Brennen einer neue Frimware für den Programmer runtergeladen.In dem Toll wird angeezigt, dass meiner die Version 1.5 ist. Ich habe mich aber nicht getraut zu flashen, da das Tool zum firmewareupdate 2.5 ist.

Weiß jemand was ich nehmen muss oder kann.

Drüße
Martin

HeXPloreR
10.12.2012, 19:11
Nimm mal vorher das myAVR Progtool von myAVR. damit machst Du jedenfalls auf die schnelle nichts falsch.
Du mußt dann nur noch das programm compilieren und holst die hex-Datei übers Progtool "Datei suchen". Das Progtool ist fast völlig selbsterklärend. Aber schauen was man wo macht mußt Du da, wie überall auch, schon.
Versuche damit erstmal zu flashen, ob es damit schneller geht. Die Firmeware kannst du dann immer noch updaten wenn nötig.

Wie lange dauert das flashe denn über Bascom? wie groß ist das programm was übertragen wird?

martin66119
10.12.2012, 19:42
Die Hex-datei ist 7k groß.

Write ca 2 min
Read ca. 2 min

also ewig

Grüße
martin

PS.: Hier der komplette Code



$regfile = "m8def.dat"
$crystal = 3686400
'***************************Config Schaltausgänge*******************************
Config Portb = Output
Brenner Alias Portb.5
Pumpefb Alias Portb.1
Pumpehk Alias Portb.2
Pumpeww Alias Portb.4
Heizungonoff Alias Portb.5
'**************************Def. allgemeiner Variabeln***************************
Dim Tagnacht As Bit
Dim Nachtbetrieb As Byte
Dim Tagbetrieb As Byte
Dim Tempmessstelle(7) As Single

Const Tagtemp_og = 21.6
Const Nachttemp_og = 21.0
Const Tagtemp_ug = 21.4
Const Nachttemp_ug = 20.8

Nachtbetrieb = 21
Tagbetrieb = 5
'**************************Funktionen LCD-Display*******************************

Config Lcd = 40 * 4
Config Lcdpin = Pin , Rs = Portb.0 , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , E2 = Portd.7
Config Lcdbus = 4
Config Lcdmode = Port

Dim ___lcdno As Bit

___lcdno = 0
Initlcd
Cursor Off
Cls
___lcdno = 1
Initlcd
Cursor Off
Cls
'************************************************* ******************************

Config 1wire = Portb.3 'DS1820

Match_rom Alias &H55
Read_scratchpad Alias &HBE
Start_conversion Alias &H44
Innen Alias 0 'Innen
Aussen Alias 1 'Aussen
Kessel Alias 2
Rücklauf Alias 3
Vorlauf Alias 4

Dim Read_temp As Integer
Dim Sensor_ids(40) As Byte
Dim Id As Byte
Dim Offset As Byte
Dim Ds_array(7) As Byte
Dim Bruchteil As Single
Dim Temperatur As Single
Dim I As Integer

'*************************Config Timer1*****************************************
Config Timer1 = Timer , Prescale = 8 '256 'Konfiguriere Timer1
Enable Timer1 'schalte den Timer1 ein
On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1
Enable Interrupts
Timer1 = 51135 'Timer1 soll schon von 34285 wegzählen
'***************************Config RTC******************************************
Config Sda = Portc.4
Config Scl = Portc.5

Const Ds1307w = &HD0 ' Addresses of Ds1307 clock
Const Ds1307r = &HD1

Config Clock = User ' this will dim the bytes automatic
Dim Weekday As Byte

'Time$ = "19:44:00" ' to watch the day changing value
'Date$ = "02.26.07" ' erstmaliges stellen der Uhr
'***************************Config 1Wire****************************************


For Id = 1 To 40 'Einlesen der 5 Sensoren IDs (5*8 Byte)
I = Id - 1
Readeeprom Sensor_ids(id) , I
Next Id

Do
Wait 1
For Id = Innen To Vorlauf
Offset = Id * 8
Offset = Offset + 1 'Offset geht auf 1, 9, 17, 25 und 33
1wreset 'hier wird der Temperaturwert eingelesen
1wwrite Match_rom
1wwrite Sensor_ids(offset) , 8 '8 Byte ID wird übertragen
1wwrite Read_scratchpad
For I = 1 To 7 'nur bis 7, weil 8 und 9 uninteressant
Ds_array(i) = 1wread()
Next I
Read_temp = Makeint(ds_array(1) , Ds_array(2))
1wreset 'jetzt wird wieder die Konvertierung gestartet
1wwrite Match_rom
1wwrite Sensor_ids(offset) , 8
1wwrite Start_conversion
Shift Read_temp , Right
If 127 < Read_temp Then Read_temp = Read_temp - 32767
Bruchteil = 16 - Ds_array(7)
Bruchteil = Bruchteil / 16
Bruchteil = Bruchteil - 0.25
Temperatur = Read_temp + Bruchteil
Tempmessstelle(id + 1) = Temperatur
___lcdno = 0
Locate 1 , 1 : Lcd " Inn Auss Kess Vorl Rück "
Select Case Id
Case Innen:
Locate 2 , 2 : Lcd Fusing(temperatur , "#.#")
Case Aussen: 'ausgabe im Display ist dann z.B.
Locate 2 , 7 : Lcd Fusing(temperatur , "#.#") ' Inn Auss Kess Rück Vorl
Case Kessel: ' 14.4 52.4 67.3 43.0 62.8
Locate 2 , 12 : Lcd Fusing(temperatur , "#.#")
'Case Rücklauf:
' Locate 2 , 18 : Lcd Fusing(temperatur , "#.#")
'Case Vorlauf:
' Locate 2 , 23 : Lcd Fusing(temperatur , "#.#")
End Select
Next Id
Gosub Anzeigezeit
Loop
End

'***************************Anzeige Zeit****************************************
Anzeigezeit:
___lcdno = 1
Locate 2 , 1
Lcd Time$
Locate 2 , 12
Lcd Date$
Locate 2 , 21
Lcd "Tag: " ; Weekday
Waitms 500
Return
'*************************Sub Relais schalten***********************************
Schalterelais:
Select Case Tagnacht
Case 0
Gosub Nachtbetrieb
Case 1
Gosub Tagbetrieb
End Select
Return
'**************************Sub für Tagbetrieb***********************************
Tagbetrieb:
Pumpeww = 1
If Tempmessstelle(1) >= Tagtemp_og Then
Brenner = 0 ' Brenner
If Tempmessstelle(1) <= 2.95 Then
Pumpefb = 0 ' Pumpe FB
End If
If Tempmessstelle(1) < 3.05 Then
Pumpehk = 0 ' PumpeHK
End If
End If
If Tempmessstelle(1) <= Tagtemp_ug Then
Brenner = 1
Pumpefb = 1
Pumpehk = 1
End If
Return
'**************************Sub für Nachtbetrieb*********************************
Nachtbetrieb:
If Tempmessstelle(1) >= Nachttemp_og Then
Brenner = 0
If Tempmessstelle(1) < 2.9 Then
Pumpefb = 0 ' Pumpe FB
End If
If Tempmessstelle(1) < 3.0 Then
Pumpehk = 0 ' PumpeHK
End If
End If
If Tempmessstelle(1) < Nachttemp_ug Then
Brenner = 1
Pumpefb = 1
Pumpehk = 1
End If
Return
'**************************Subroutine für Timer1********************************
Isr_von_timer1: 'ISR von Timer1
Timer1 = 51135
If _hour >= Nachtbetrieb Or _hour < Tagbetrieb Or _hour = 7 Then 'Sp > 2 Then 'Timer1 soll wieder von 34285 wegzählen
Tagnacht = 0 'Nachteinstellung
Else
Tagnacht = 1 'Tageinstellung
End If
Return
'***************************Subs für RTC****************************************
Getdatetime:
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 0 ' start address in 1307

I2cstart ' Generate start code
I2cwbyte Ds1307r ' send address
I2crbyte _sec , Ack
I2crbyte _min , Ack ' MINUTES
I2crbyte _hour , Ack ' Hours
I2crbyte Weekday , Ack ' Day of Week
I2crbyte _day , Ack ' Day of Month
I2crbyte _month , Ack ' Month of Year
I2crbyte _year , Nack ' Year
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return

Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 4 ' starting address in 1307
I2cwbyte _day ' Send Data to SECONDS
I2cwbyte _month ' MINUTES
I2cwbyte _year ' Hours
I2cstop
Return

Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 0 ' starting address in 1307
I2cwbyte _sec ' Send Data to SECONDS
I2cwbyte _min ' MINUTES
I2cwbyte _hour ' Hours
I2cstop
Return
'************************************************* ******************************


$eeprom

Data &H10 , &HE8 , &HF4 , &H23 , &H01 , &H08 , &H00 , &HEF
Data &H10 , &H1B , &HD0 , &H23 , &H01 , &H08 , &H00 , &H23
Data &H10 , &H78 , &H37 , &H39 , &H01 , &H08 , &H00 , &H11
Data &H10 , &HC0 , &H46 , &H19 , &H01 , &H08 , &H00 , &H67

HeXPloreR
10.12.2012, 20:02
Okay, das ist zu viel für mich.

Aber das dauert definitiv zu lange.
Baudrate in Bascom geprüft? Das könnte ich mir noch vorstellen.
Auto verify mal rausnehmen. Du beschreibst ja auch eeprom, vielleicht deswegen so langsam.

Kannst Du probehalber ein anders Program flashen welchen eine LED im sekunden takt ein und ausschaltet.
Ob das auch solange braucht und ob es auch richtig ankommt?

Hardwarefehler kann man ausschliessen?

martin66119
10.12.2012, 21:15
Auto verify ist nun draußen. Nun dauert es nur 1/2 mal so lange, was auch zu erwarten war, da das read nicht mehr durchgeführt wird.

Ein anderes Programm "ID-Auslesen" DS18B20 dauert auch so lange.

peterfido
16.12.2012, 07:01
Ich nutze auch einen USB-ISP. (Den von Ulrich Radig, läuft als USBASP). Darauf gibt es einen Jumper, um langsam getaktete AVRs zu beschreiben. Bei neueren Versionen kann man dies in den Optionen unter Programmer einstellen.

Evtl. läuft es bei Dir auf der langsamsten Stufe.

lema67
17.02.2013, 19:19
Das kenne ich auch. Wenn ich in Bascom den myAVrMK2 auswählen dauert das Proggen gefühlte 5 min. Ich nutze myAVR_progswitch.exe damit schreibe ich nen Atmega32 in ca. 15 sekunden.

24553

HeXPloreR
17.02.2013, 19:43
Das kenne ich auch. Wenn ich in Bascom den myAVrMK2 auswählen dauert das Proggen gefühlte 5 min. Ich nutze myAVR_progswitch.exe damit schreibe ich nen Atmega32 in ca. 15 sekunden.



Hallo, das kann aber nicht richtig sein. Reden wir vom mySmartUSB MK2?
Mit dem flashe ich selbst aus Bascom nicht merklich langsamer als mit dem ProgTool.
Vielleicht nicht "external Programmer" wählen ;)

24554
Bascom V 2.0.7.6

Viele Grüße

lema67
17.02.2013, 19:56
OK alles zurück hatte es halt seit 2008 nicht mehr ausprobiert da es damals ewig gedauert hat.
In Bascom v 2.0.7.6 gehts genauso fix.
Danke für den hinweis.