• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Fragen zu Programmiergeräten und zur Programmierung der uC

hm genau das hab ich gemacht.
hab auch extra nochmal die datenblätter abgeglichen und mit nem multimeter den durchgang geprüft.
konnte aber keinen fehler finden.
 

Millhouse

Geocacher
Wichtig ist zu wissen, das der ISP-Programmer die Schaltung nicht mit einer Spannung versorgt! Die Schaltung muss immer noch durch eine externe Spannungsquelle versorgt werden!

Am besten testet man den ISP-Programmer indem man versucht die Signatur des Atmels auszulesen. Funktioniert dies, so wird auch der Rest funktionieren. Beim Auslesen der Signatur kann man nichts verstellen oder kaputtmachen.

Was für Fehlermeldungen bekommst du denn eigentlich? Funktioniert das ansteuern des Programmers in AVR-Studio? Es gibt beim ISP-MK2 eigentlich folgende Fehlermöglichkeiten:

  • Treiber nicht installiert. Am besten installiert man die Treiber, indem man das kostenlose (aber leider recht große) Atmel AVR Studio installiert.
  • Programmer verkehrt angeschlossen am Atmel. Normalerweise wird bei richtigen Anschluss eine weitere grüne LED aufleuchten. Leichtet diese rot, oder blinkt diese Rot, so ist dies ein Indiz für verkehrt angeschlossene Leitungen.
  • Reset-Pin ist zu niederohmig an VCC angeschlossen. Es existieren leider im Internet zahlreiche Bauvorschläge in denen empfohlen wird, den Reset Pin des Atmel-AVR mit einem Widerstand nach VCC zu verbinden. Das ist unnötig, der die meisten Atmels am Reset Pin einen internen Widerstand gegen Vcc haben. Ist der externe Widerstand zu niederohmig (R < ca. 5KOhm) funktioniert das Programmieren nicht. Der oft auch vorgeschlagene Kondensator sollte auch entfernt werden, da der Atmel eine eigene interne Power-On-Reset Schaltung hat.
  • MISO, MOSI, SCK sind zu stark durch die angeschlossene Peripherie belastet. Da hilft nur das Ablöten der entsprechenden Leitungen.
  • Falsche ISP Frequenz. Zum Programmieren des Atmels darf der ISP Programme auf der SCK Leitung keine Frequenzen benutzen, die größer als 1/4 des Taktes ist, mit dem der Atmel läuft. Fabrikneue Atmels laufen meistens mit 8Mhz, der Takt ist aber noch durch 8 geteilt. D.H. der Atmel läuft nur mit 1Mhz! Der ISP Takt darf also nicht mehr als 250Khz sein. Ich benutze dann meistens 125Khz. Mit der Im AVR-Studio integrierten ISP-Programmiersoftware kann der ISP-Takt eingestellt werden. Wenn der Takt des Atmel mit Fuses auf andere Frequenzen eingestellt wurde, so muss der ISP Takt entsprechend verändert werden.
  • Wurde der Takteingang des Atmels mittels Fuses (kann auch schnell mit schlechten Programmern aus Versehen oder aufgrund von Kommunikationsfehlern passieren) verstellt, so kann es sein, das der Atmel nicht mehr per ISP Programmiert werden kann, da dann der Atmel keinen Takt mehr bekommt.
 
Millhouse schrieb:
Wichtig ist zu wissen, das der ISP-Programmer die Schaltung nicht mit einer Spannung versorgt! Die Schaltung muss immer noch durch eine externe Spannungsquelle versorgt werden!

aha, das erklärt natürlich einiges.
bin davon ausgegangen das die spannung des usb reicht um den tinny zu programieren.

d.h. ich brauch auch eine zusätziche spannungsversorgung obwohl der tinny nichts machen muss, sondern nur zum programieren auf einem leeren lochbrett in einem ic sockel steckt?

in avr studio bekomme ich diese fehlermeldung, was ja für die fehlende stromversorgung sprechen würde :)
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    9,6 KB · Aufrufe: 8.311
ok dann liegts also an der stromversorgung.
mein "programierbrett" sieht bisher ja nur so aus.
[der isp stecker von oben gesehen, also im wannenstecker steckend]

wo müsste ich die spannung denn jetzt anlegen und wieviel genau, damit das ganze funktioniert.
danke für die hilfe
gruß theo_testperson
 

Anhänge

  • tinny Kopie.png
    tinny Kopie.png
    81,9 KB · Aufrufe: 8.305

Millhouse

Geocacher
Du kannst eigentlich jede Spannung zwischen 3V und 5V verwenden. Wenn du eine stabilisierte 5V Gleichspannung hast, dann nehme diese, ansonsten zwei oder drei 1.5V Batterien. Anschließen musst du die Versorgungsspannung an Vcc (+) und GND(-).

Die Versorgungsspannung wird nur zur Versorgung vom Mikrocontroller gebraucht. Der ISP-Programmer wird vom USB-Bus versorgt. Er kann dir übrigens die Versorgungsspannung die am Mikrocontroller anliegt messen und in AVR-Studio anzeigen.
 
super, vielen dank für deine hilfe...
jetzt leuchten immerhin schonmal beide leds grün und unter avr studio 4 wird der chip nun auch erkannt, aber unter boscom leider nicht.
naja jedenfalls stimmt meine schaltung jetzt schonmal.
werd ich mich wohl in avr studio einlesen müssen.
 

Windi

Geoguru
Ich weiß nicht wie es mit Deinem USB-Programmer aussieht.
Aber mit den USB-Programmern von myavr.de ist es unter Bascom nicht möglich die Fusebits auszulesen oder zu verändern. Ich vermute mal, dass das mit anderen USB-Programmern ähnlich sein könnte.
 
ja das scheint tatsächlich so zu sein.
ich hab inzwischen versucht mich in avr studio einzuarbeiten aber ich bekomm einfach nix auf den chip bzw kein hex file generiert
wen ich auf build klicke kommt immer nur :

D:\atmel\nachtaktiver_blinker\nachtaktiver_blinker.asm(2): error: syntax error, unexpected INTEGER

Assembly failed, 1 errors, 0 warnings
 

Lanfair

Geocacher
theo_testperson schrieb:
D:\atmel\nachtaktiver_blinker\nachtaktiver_blinker.asm(2): error: syntax error, unexpected INTEGER
Ohne Code kann Dir hier wohl keiner wirklich helfen. Poste den Code, den Du kompilieren möchtest.

Wobei ich etwas verwundert bin, ich dachte Du willst das AVR Studio für den Transfer des HEX-Files nutzen, nicht zum Kompilieren. Wenn der Quellcode in Basic ist, dann mußt Du diesen mit Bascom kompilieren. Die erstellte HEX-Datei dann mit AVR Studio zum Mikrocontroller übertragen.
 
Lanfair schrieb:
theo_testperson schrieb:
ich dachte Du willst das AVR Studio für den Transfer des HEX-Files nutzen, nicht zum Kompilieren.

ok da hast du wohl recht, dachte man macht es halt besser in einem programm
aber ich glaub ich versteh boscom und avr studio auch einfach nicht.
im kochbuch hat sich alle so einfach angehört :kopfwand:

es ist also so, das ich in boscom keine fusebits setzen, aber das programm als hex file kompilieren kann.
d.h ich kopier mir das programm aus dem kochbuch , füge es in eine neue .bas datei ein und geh dann auf compile programm ?
[das geht bei mir natürlich auch nicht, aber vielleicht ist der weg ja richtig]

sorry für meine andauernden fragen aber ich versteh leider einfach nicht wieso es nicht klappt bzw wo ich jetzt schon wieder nen fehler mache.
 

Teddy-Teufel

Geoguru
theo_testperson schrieb:
es ist also so, das ich in boscom keine fusebits setzen, aber das programm als hex file kompilieren kann.
d.h ich kopier mir das programm aus dem kochbuch , füge es in eine neue .bas datei ein und geh dann auf compile programm ?
[das geht bei mir natürlich auch nicht, aber vielleicht ist der weg ja richtig]

sorry für meine andauernden fragen aber ich versteh leider einfach nicht wieso es nicht klappt bzw wo ich jetzt schon wieder nen fehler mache.

Theo, mal ein Beispiel unter Nutzung von Bascom:
Du kopierst das Programm aus dem Kochbuch und erstellst eine bas-File. Wenn nach dem Kompilern (F7) kein Fehler gefunden wird kannst Du bei Bascom mittels F4 das Programm in den Tiny schreiben. Falls bei den Fuses was geändert werden muß geht das von Bascom aus auch sehr gut. Allerdings ist der Unterschied, daß ich einen selbstgebauten Adapter nutze. So, nun kannst Du weiter fragen, irgendwann werden wir schon Erfolg haben.
 
ich glaub ich gebs auf.
bei mir klappt nichtmal das kompilieren in boscom
egal welches programm ich reinkopiere, er findet immer irgendwelche fehler.
als beispiel.
ich kopiere das programm nachtaktiver Blinker aus dem kochbuch [6.1.2] in mein .bas file
1 ' ************************************
2 ' *** ***
3 ' *** Reaktiv-Tiny v0.1 24/11/2005 ***
4 ' *** ***
5 ' ************************************
6
7 $regfile = "ATtiny13.DAT"
8 $crystal = 113000 'Reale Frequenz des internen 128kHz-Oszillators
9
10 Config Portb = &B00011000 'Pinb.3 und .4 auf 'Ausgang', Rest auf 'Eingang' schalten
11 Portb = &B11100111 'Pullups zuschalten, au¼er fÄur Pinb.3 und .4
12 Stop Adc 'A/D-Wandler abschalten, um Strom zu sparen
13 Stop Ac 'Analog-Komparator abschalten, um Strom zu sparen
14
15 Dim A As Byte
16 Dim B As Byte
17 Dim Led_ladezustand As Bit
18 Dim Hell As Bit
19
20 Do
21 Gosub Led_abfrage
22
23 If Led_ladezustand = 0 Then
24 Hell = 1 'Bei Licht Merker setzen
25 End If
26 If Hell = 1 And B < 255 Then
27 B = B + 1 'Wenn Merker gesetzt wurde, ZÄahler fÄur Licht dauer erhÄohen (max. 255)
28 End If
29 If Led_ladezustand = 1 And Hell = 1 And B < 50 Then
30 Gosub Blinken 'Wenn es wieder dunkel ist und der Lichtimpuls nur kurz war, dann blinken
31 End If
32 If Led_ladezustand = 1 Then 'Bei Dunkelheit Merker und ZÄahler fÄur Lichtdauer
33 Hell = 0 'lÄoschen
34 B = 0
35 End If
36 Loop
37
38 Led_abfrage:
39 Portb.3 = 0 'Portb.3 auf Masse schalten
40 Portb.4 = 1 'Portb.4 auf +Ub schalten, um die LED zu 'laden'
41 Waitus 1 'Ladezeit, kann ggf. noch verkleinert werden
42 Config Portb.4 = Input 'Portb.4 nun zwecks Abfrage der LED-Ladung auf 'Eingang schalten
43 Portb.4 = 0 'Pullup abschalten, sonst geht's nicht!
44 Waitms 20 'Entladezeit 20 ms - je kleiner, je unempfindlicher
45 Led_ladezustand = Pinb.4 'Ladezustand einlesen: '1' -> dunkel, '0' -> hell
46 Config Portb.4 = Output 'Portb.4 wieder auf Ausgang schalten
47 Portb.4 = 0 'Portb.4 auf Masse schalten
48 Return
49
50 Blinken:
51 For A = 1 To 10
52 Portb.3 = 1
53 Waitms 50
54 Portb.3 = 0
55 Waitms 500
56 Next A
57 Return
58
59 End

wenn ich jetzt auf F7 drücke geht zwar das compiling fenster auf, aber es geht nach 2 sec mit dem festgelegten fehler sound wieder zu.

als error werden diese zwei zeilen ausgegeben:
Error: 1 Line: 1 Unknown satement [1] , in File: G:\nachtaktiverblinker.bas
Error: 1 Line: 2 Unknown satement [2] , in File: G:\nachtaktiverblinker.bas

wenn ich jetzt einfach ein anderes programm aus dem kochbuch kopiere, z.b. das grundprogram [6.1.1]
1 ' ************************************
2 ' *** ***
3 ' *** Reaktiv-Tiny v0.1 20/11/2005 ***
4 ' *** ***
5 ' ************************************
6
7 $regfile = "ATtiny13.DAT"
8 $crystal = 113000 'Reale Frequenz des internen 128kHz-Oszillators
9
10 Config Portb = &B00011000 'Pinb.3 und .4 auf 'Ausgang', Rest auf 'Eingang' schalten
11 Portb = &B11100111 'Pullups zuschalten, au¼er fÄur Pinb.3 und .4
12 Stop Adc 'A/D-Wandler abschalten, um Strom zu sparen
13 Stop Ac 'Analog-Komparator abschalten, um Strom zu sparen
14
15 Dim A As Byte
16 Dim Hell_dunkel As Bit
17
18 Do
19 Gosub Led_abfrage
20
21 If Hell_dunkel = 0 Then
22 For A = 1 To 10
23 Portb.3 = 1
24 Waitms 50
25 Portb.3 = 0
26 Waitms 500
27 Next A
28 End If
29
30 Loop
31
32 Led_abfrage:
33 Portb.3 = 0 'Portb.3 auf Masse schalten
34 Portb.4 = 1 'Portb.4 auf +Ub schalten, um die LED zu 'laden'
35 Waitus 1 'Ladezeit, kann ggf. noch verkleinert werden
36 Config Portb.4 = Input 'Portb.4 nun zwecks Abfrage der LED-Ladung auf 'Eingang' schalten
37 Portb.4 = 0 'Pullup abschalten, sonst geht's nicht!
38 Waitus 1500 'Entladezeit - je kleiner, je unempfindlicher
39 Hell_dunkel = Pinb.4 'Ladezustand einlesen
40 Config Portb.4 = Output 'Portb.4 wieder auf Ausgang schalten
41 Portb.4 = 0 'Portb.4 auf Masse schalten
42 Return
43
44 End
und versuche das zu kompilieren, also f7 drücke, kommen genau die gleichen errors.

kann es daran liegen das ich eine andere boscom version hab?
ich hab nur die version 1.11.9.8 im netz gefunden
ich verlier langsam den glauben an mein technik verständnis
 

qByter

Geocacher
Du hast doch wohl nicht etwa die Zeilennummern am Anfang jeder Zeile mit reinkopiert, oder? :D

Bascom ist zwar Basic, aber kein C64 ;)
 
aha..
sollte es also doch so einfach sein?

hmm...gut das erklärt natürlich einiges.
na hoffentlich bin ich nicht der erste dem das passiert ist.
tausend dank :gott:
 

Teddy-Teufel

Geoguru
theo_testperson schrieb:
aha..
sollte es also doch so einfach sein?

hmm...gut das erklärt natürlich einiges.
na hoffentlich bin ich nicht der erste dem das passiert ist.
tausend dank :gott:
Woher hast Du denn überhaupt die Zeilennummern? Im Kochbuch sind doch keine.
 
doch, in meiner kochbuchversion [Stand: 20. September 2009] stehen die in jedem programm.

ich hab es inzwischen ohne die zeilenzahlen im programmcode hinbekommen das hex file in boscom zugenerieren und es mit avr studio zu übertragen.
jetzt kann ich endlich richtig anfangen.

ich hab gestern mal noch ein paar programme getestet und die haben eigentlich alle funktioniert.
dann hab ich mich an das programm von schittlerwiller aus dem 144seiten fred gemach. es geht dabei um diesen code
Code:
'============================================================
'
' ***********************************************************
' ***                                                     ***
' *** Reaktiv-Tiny v0.5 2006-02-25                   (AP) ***
' ***                                                     ***
' *** Morsecodeabfrage eines Morsezeichens mit            ***
' *** anschließender Ausgabe von bis zu 64 Morsezeichen.  ***
' *** Es können Koordinaten oder beliebiger Text          ***
' *** ausgegeben werden.                                  ***
' *** Die Eingabegeschwindigkeit wird mit der ersten      ***
' *** empfangenen Zeichenlänge bestimmt                   ***
' ***                                                     ***
' ***                                                     ***
' *** --------------- Einstellungen --------------------- ***
' ***                                                     ***
' *** Fusebit H:    0                                     ***
' *** Fusebit G:    0                                     ***
' *** Fusebit F:    1                                     ***
' *** Fusebit E:    1                                     ***
' *** Fusebit DCBA: 1011                                  ***
' ***                                                     ***
' *** Beachtet das Fusebit G. Es muss auf 0 stehen!       ***
' ***                                                     ***
' *** Unter 'Options' ' Compiler' 'Chip'                  ***
' *** den "HW Stack" runterstellen. z.B. auf 6            ***
' ***                                                     ***
' ***********************************************************
'
' µC: ATtiny13V
'
'============================================================
'
$regfile = "ATtiny13.DAT"
$crystal = 113000              'Reale Frequenz des internen 128kHz-Oszillators
$hwstack = 6
'
Config Portb = &B00011000      'Pinb.3 und .4 auf 'Ausgang', Rest auf 'Eingang' schalten
Portb = &B11100111             'Pullups zuschalten, außer für Pinb.3 und .4
'
Stop Adc                       'A/D-Wandler abschalten, um Strom zu sparen
Stop Ac                        'Analog-Komparator abschalten, um Strom zu sparen
'
'
'Anmerkung zur Deklaration: bin sparsam mit den Variablen umgegangen,
'd.h. diese werden zum Teil im Programm mehrfach für verschiedene Aufgaben verwendet.
'Grund: ich kenne das "Drosseln" des HW Stack erst seit es hier im Fred stand. Dank an Gonzoarts.
Dim Hell As Bit
Dim Vhell As Bit
Dim Ok As Bit
Dim A As Byte
Dim B As Byte
Dim Ein As Integer
Dim Bx As Byte
Dim Z As Byte
Dim D1 As Byte
Dim D2 As Integer
'
'
'
'
' Es können alle Buchstaben und Zahlen gesendet werden, da diese maximal 5 Zeichen lang sind.
' Ausgabe der Zeichen aus dem EEPROM mit Länge
'                                             
'
'
' dit = kurz = . = 0   
' dah = lang = - = 1
'
'             
'            765 43210                             
'            \_/ \___/                             
'             |    |                               
'           Länge  |                               
'                  |                               
'            Morsezeichen v.rechts (rückwärts)     
'
'     Morse   Bit v.r.
'1 = .---- = 100|11110
'2 = ..--- = 100|11100
'3 = ...-- = 100|11000
'4 = ....- = 100|10000
'5 = ..... = 100|00000
'6 = -.... = 100|00001
'7 = --... = 100|00011
'8 = ---.. = 100|00111
'9 = ----. = 100|01111
'0 = ----- = 100|11111
'
'N = -.    = 001|00010
'E = .     = 000|00000
'
'KA (Spruch Anfang) = -.-.- = 100|10101
'AR (Spruch Ende)   = .-.-. = 100|01010
'
'Wortabstand einfügen mit 111|11111  (FF)
'
'
' Übertragungsrate
' 1 WPM: 1 dit = 1200 ms
' 5 WPM: 1 dit =  240 ms
'10 WPM: 1 dit =  120 ms
'20 WPM: 1 dit =   60 ms
'
'
'==> Übertragungsrate festlegen, hier 5 Wörtern pro Minute (WPM)
D1 = 240                                    'D1 entspricht der Länge eines dit in Millisekunden
D2 = 480                                    'D2 entspricht der doppelten Länge eines dit
'
'==> Abgefragtes Zeichen festlegen
Ein = &B0000000000111000                    'Beispiel: SOS  ...---...   
'
'
Ok = 1
Gosub Morsen                                'beim Start das ganze mal testweise Morsen
'
' Morsezeichen - Abfrage:
Do
   Gosub Led_abfrage
   If Hell = 1 Then Vhell = 1               'Bei Licht Merker setzen
   If Vhell = 1 And B < 255 Then B = B + 1  'Wenn Merker gesetzt wurde, Zähler für Lichtdauer erhöhen (bis max. 255)
   If Hell = 0 Then
      If Vhell = 1 Or B = 255 Then          'Übergang zu Dunkel
         If Z = 0 Then
            Ok = 1                          'Neues Spiel, neues Glück
                                            'Festlegen der Grenzdauer. Diese entscheidet, ob ein dit oder dah eingegeben wurde.
           '==> Leider muss man hier "von Hand" eintragen, ob das erste Zeichen dit oder dah ist. Bei dit B), bei dah A) auskommentieren
           'Die benötigte If-Abfrage hat im 1k Programmspeicher des ATtiny13V keinen Platz mehr.
                                       'A) erstes abgefragtes Zeichen ist ein dit
            If B < 127 Then            'A) dies sollte nicht zu lange sein
               Bx = B * 1.7            'A) Grenzdauer Bx durch Länge des ersten dit festlegen
            Else                       'A)
               Ok = 0                  'A) das war zu lange fürs erste dit
            End If                     'A)
                                       'B) erstes abgefragtes Zeichen ist ein dah
'            Bx = B / 2                'B) Grenzdauer Bx durch Länge des ersten dah festlegen
         End If
         If B < Bx Then
            If Ein.z = 1 Then Ok = 0   'dit empfangen, wenn Ein.z = 0, dann richtig
         Else
            If Ein.z = 0 Then Ok = 0   'dah empfangen, wenn Ein.z = 1, dann richtig
         End If
         Z = Z + 1
         If Z = 9 Or Ok = 0 Then       'Auswerten wenn Falsch ODER Anzahl Zeichen erreicht
            Gosub Morsen               '==> Z auf die Anzahl abgefragter Zeichen einstellen
         End If
      End If
   End If
   If Hell = 0 Then                    'Bei Dunkelheit Merker und Zähler für Lichtdauer löschen
      Vhell = 0
      B = 0
   End If
Loop


Morsen:
   Waitms 500                          'Pause, sonst ist das erste Zeichen schwer zu lesen
   If Ok = 1 Then                      'Morsezeichen senden
      For Bx = 0 To 36                 '=> Länge anpassen!
         Readeeprom A , Bx             'in A steht der zu morsende Code (Bit 0 bis 4 dit und dah, Bit 5 bis 7 die Anzahl
         Z = 0
         Z.0 = A.5                     'Zeichenlänge steht in den vorderen 3 Bit (A.5 bis 7)
         Z.1 = A.6
         Z.2 = A.7
         If Z = 7 Then                 'bei FF einen Wortabstand einfügen (4dit = 7dit - 3dit)
            Waitms D2
            Waitms D2
         Else                          'Zeichenlänge: 1 bis 5  (0 bis 4)
            Gosub Licht
         End If
      Next Bx
   Else                                ' IRRUNG senden
       If B < 255 Then                 ' aber nicht, wenn die Dämmerung eintritt bzw. ein langes Lichtsignal anlag
          Z = 7
          A = 0                        ' Irrung  =  ........ =  0
          Gosub Licht
       End If
   End If
   'A = 0
   B = 0
   Z = 0
Return


Licht:
   For B = 0 To Z
      Portb.3 = 1                      'LED an
      Waitms D1                        '1  . dit
      If A.b = 1 Then
         Waitms D2                     '3  - dah
      End If
      Portb.3 = 0                      'LED aus
      Waitms D1                        '1 dit  Pause
   Next B
   Waitms D2                           '+2 dit Pause nach Ziffer
Return


Led_abfrage:
   Portb.3 = 0                         'Portb.3 auf Masse schalten
   Portb.4 = 1                         'Portb.4 auf +Ub schalten, um die LED zu 'laden'
   Waitus 1                            'Ladezeit 1 µs, kann ggf. noch verkleinert werden
   Config Portb.4 = Input              'Portb.4 nun zwecks Abfrage der LED-Ladung auf 'Eingang' schalten
   Portb.4 = 0                         'Pullup abschalten, sonst geht's nicht!
   Waitms 20                           'Entladezeit 20 ms - je größer, desto weniger Licht genügt (je kleiner, je unempfindlicher)
   If Pinb.4 = 0 Then                  'Ladezustand einlesen: '1' -> dunkel, '0' -> hell
      Hell = 1
   Else
      Hell = 0
   End If
   Config Portb.4 = Output             'Portb.4 wieder auf Ausgang schalten
   Portb.4 = 0                         'Portb.4 auf Masse schalten
Return


End

damit das funktioniert muss ich ja das eeprom mit folgendem code beschreiben.
Code:
'============================================================
'
' ***********************************************************
' ***                                                     ***
' *** Reaktiv-Tiny EEPROM schreiben  2006-02-25      (AP) ***
' ***                                                     ***
' ***                                                     ***
' *** Beachtet das Fusebit G. Es muss auf 0 stehen!       ***
' ***                                                     ***
' *** Fusebit H:    0                                     ***
' *** Fusebit G:    0                                     ***
' *** Fusebit F:    1                                     ***
' *** Fusebit E:    1                                     ***
' *** Fusebit DCBA: 1011                                  ***
' ***                                                     ***
' ***                                                     ***
' ***********************************************************
'
' µC: ATtiny13V
'
'============================================================
'
$regfile = "ATtiny13.DAT"
$crystal = 113000             'Reale Frequenz des internen 128kHz-Oszillators
$hwstack = 6
'
'Config Portb = &B00011000     'Pinb.3 und .4 auf 'Ausgang', Rest auf 'Eingang' schalten
'Portb = &B11100111            'Pullups zuschalten, außer für Pinb.3 und .4
'
Stop Adc                      'A/D-Wandler abschalten, um Strom zu sparen
Stop Ac                       'Analog-Komparator abschalten, um Strom zu sparen
'
'
Dim A As Byte
'
'
'--------------------------------------------------------------
' Bitwert 0=dit, 1=dah
' das Byte von rechts lesen, da Schleife von 0 bis z läuft
' z ist die Zeichenlänge minus eins, die in den oberen 3 Bit festegelgt wird
'
'     Morse  Bit v.r.       Hex   Dec
'1 = .---- = 100|11110   1  9E    158
'2 = ..--- = 100|11100   2  9C    156
'3 = ...-- = 100|11000   3  98    152
'4 = ....- = 100|10000   4  90    144
'5 = ..... = 100|00000   5  80    128
'6 = -.... = 100|00001   6  81    129
'7 = --... = 100|00011   7  83    131
'8 = ---.. = 100|00111   8  87    135
'9 = ----. = 100|01111   9  8F    143
'0 = ----- = 100|11111   0  9F    159
'
'N = -.    = 001|00001   N  21     33
'E = .     = 000|00000   E  00      0
'
' Pause    = 111|11111   0  FF    255
'
' KA (Spruch Anfang) = -.-.- = 100|10101   95    149
' AR (Spruch Ende)   = .-.-. = 100|01010   8A    138
'
'
'
'Wortabstand ==             FF
'H = ....  = 011|00000   H  60     96
'A = .-    = 001|00010   A  22     34
'P = .--.  = 011|00110   P  66    102
'P   .--.  = 011|00110   P  66    102
'Y = -.--  = 011|01101   Y  6D    109
'Wortabstand ==             FF
'H = ....  = 011|00000   H  60     96
'U = ..-   = 010|00100   U  44     68
'N = -.    = 001|00001   N  21     33
'T = -     = 000|00001   T  01      1
'I = ..    = 001|00000   I  20     32
'N = -.    = 001|00001   N  21     33
'G = --.   = 010|00011   G  43     67
'Wortabstand ==             FF
'Ende                       8A
'
'
'
'=============================================
' Beispiel Cache: N49.12.345 E008.56.789
'=============================================
'
'
A = &B11111111           ' Pause
Writeeeprom A , 0
A = &B10010101           ' KA (Spruch Anfang) = -.-.-
Writeeeprom A , 1
A = &B11111111           ' Pause
Writeeeprom A , 2
A = &B00100001           ' N = -.
Writeeeprom A , 3
A = &B10010000           ' 4 = ....-
Writeeeprom A , 4
A = &B10001111           ' 9 = ----.
Writeeeprom A , 5
A = &B10011110           ' 1 = .----
Writeeeprom A , 6
A = &B10011100           ' 2 = ..---
Writeeeprom A , 7
A = &B10011000           ' 3 = ...--
Writeeeprom A , 8
A = &B10010000           ' 4 = ....-
Writeeeprom A , 9
A = &B10000000           ' 5 = .....
Writeeeprom A , 10
A = &B11111111           ' Pause
Writeeeprom A , 11
A = &B00000000           ' E = .
Writeeeprom A , 12
A = &B10011111           ' 0 = -----
Writeeeprom A , 13
A = &B10011111           ' 0 = -----
Writeeeprom A , 14
A = &B10000111           ' 8 = ---..
Writeeeprom A , 15
A = &B10000000           ' 5 = .....
Writeeeprom A , 16
A = &B10000001           ' 6 = -....
Writeeeprom A , 17
A = &B10000011           ' 7 = --...
Writeeeprom A , 18
A = &B10000111           ' 8 = ---..
Writeeeprom A , 19
A = &B10001111           ' 9 = ----.
Writeeeprom A , 20
A = &B11111111           ' Pause
Writeeeprom A , 21
A = &B01100000           ' H = ....
Writeeeprom A , 22
A = &B00100010           ' A = .-
Writeeeprom A , 23
A = &B01100110           ' P = .--.
Writeeeprom A , 24
A = &B01100110           ' P = .--.
Writeeeprom A , 25
A = &B01101101           ' Y = -.--
Writeeeprom A , 26
A = &B11111111           ' Pause
Writeeeprom A , 27
A = &B01100000           ' H = ....
Writeeeprom A , 28
A = &B01000100           ' U = ..-
Writeeeprom A , 29
A = &B00100001           ' N = -.
Writeeeprom A , 30
A = &B00000001           ' T = -
Writeeeprom A , 31
A = &B00100000           ' I = ..
Writeeeprom A , 32
A = &B00100001           ' N = -.
Writeeeprom A , 33
A = &B01000011           ' G = --.
Writeeeprom A , 34
A = &B11111111           ' Pause
Writeeeprom A , 35
A = &B10001010           ' AR (Spruch Ende)   = .-.-. =
Writeeeprom A , 36

End

ich kann aber meinen avrisp mk2 unter boscom nicht richtig benutzen und bekomme deshalb über boscom das eeprom nicht richtig beschrieben.
unter avr studio gibt es die option ein hex file auf das eeprom zu brennen.
wenn ich aber ein in boscom compilliertes hex file mit dem programm für der eeprom versuche, bekomme ich diese fehlermeldung:

"the contents of the HEX file does not fit in the selected devide"

mir ist bewusst das ich hier jetzt schon wieder eine völlig neue baustelle aufmache, aber warscheinlich hab ich nur wieder irgendwelche zahlem mit kopiert und ich blamier mich hier wieder. wie müsste ich das hex file in boscom denn erstellen um es in avr studio ins eeprom zu brennen oder kann es auch an irgendwelchen nicht richtig gesetzten fusebits liegen, die bezeichnungen fusebit G existieren in avr studio nämlich leider nicht und ich muss mir immer die beschreibung der fusebits in boscom durchlesen und dann vergleichen welche beschreibung in avr studio dem am nächsten kommt?

nochmal vielen, vielen dank für eure hilfe und eure geduld mit mir.
 

stonewood

Geowizard
Optimierung in bascom eingeschaltet? Findet sich in den Compileroptionen. Ohne geht z.B. auch das teach-in LED-only nicht auf einen Tiny.
 

Lanfair

Geocacher
Der zweite Programmcode ist meiner Meinung nach kein Code, der direkt in das EEPROM geschrieben wird. Es ist ein Programm, welches in das Flash geschrieben, dort ausgeführt wird und dabei die erforderlichen Daten selbständig in das EEPROM schreibt.

Zumindest sagt mir Bascom in der Hilfe zum Befehl "Writeeeprom": Write a variables content to the DATA EEPROM.

Also schreibe die erzeugte HEX Datei ins Flash und lege eine Versorgungsspannung an den µC, damit der das Programm einmal ausführt. Anschließend schreibst Du das erste Programm ins Flash und es sollte alles klappen.

PS: Für die nächsten Posts noch ein paar a für Bascom. Es heißt B_A_scom, nicht B_O_scom, der Name kommt von der Programmiersprache BASIC. Here we go und nicht alle auf einmal: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ;)
 

Teddy-Teufel

Geoguru
Lanfair schrieb:
Der zweite Programmcode ....selbständig in das EEPROM schreibt.
Ab hier
Code:
A = &B11111111           ' Pause
Writeeeprom A , 0
A = &B10010101           ' KA (Spruch Anfang) = -.-.-
Writeeeprom A , 1
A = &B11111111           ' Pause
Writeeeprom A , 2
A = &B00100001           ' N = -.
Writeeeprom A , 3
A = &B10010000           ' 4 = ....-
Writeeeprom A , 4
...

A = &B10001010           ' AR (Spruch Ende)   = .-.-. =
Writeeeprom A , 36

End
wird alles zuerst in den EEPROM geschrieben. Danach wird das eigentliche Programm in den Chip geschrieben. Vorher jedoch unbedingt auf die richtig gesetzten Fusebits achten.

PS: Für die nächsten Posts noch ein Hinweis, man beschreibt den Chip, brennen gehört woanders hin. :p
 
Oben