Wegen Atmelprogrammierung

Alles rund um Computertechnik, LEDs, und und und....
decoolegangsta

Beitrag von decoolegangsta » Montag 16. Februar 2004, 18:27

AN ALLE:

Es gibt bei www.elektro-nix.de günstige Pic's und Atmels
Z.B. den ATtiny15L-IPI für 1,99€
@Harry
Ich weiß natürlich nicht was du bezahlst.

Ich z.B. bin hier drauf gestoßen, weil ich bei EBay einfach mal nach den 2313'er suchte und da 2Stk. für 3 € gekriegt habe, OBWOHL die bei der gleichen Firma (also elektro-nix) für 2,04€ je. Stk. zu kaufen sind.
Versand war bei mir bloß 2 €.

Also wer interessiert ist kann ja mal reinschauen.

Benutzeravatar
JRaeck
Forumane
Beiträge: 337
Registriert: Samstag 24. Mai 2003, 15:23
Wohnort: Wickede (Ruhr)
Kontaktdaten:

Beitrag von JRaeck » Montag 16. Februar 2004, 23:05

Ich habe das AVR Studio 3.56. Dort habe ich den Code reinkopiert.
Was muss ich denn tun, um den Code im AVR Studio 3.56 zu testen?
JRaeck - N-Bahner
Bild

Benutzeravatar
Harry
Forumane
Beiträge: 2912
Registriert: Dienstag 4. Februar 2003, 12:27
Wohnort: Mache gern Urlaub an der NordOstsee
Kontaktdaten:

Beitrag von Harry » Dienstag 17. Februar 2004, 07:41

Ich habe das AVR Studio 3.56. Dort habe ich den Code reinkopiert.
Was muss ich denn tun, um den Code im AVR Studio 3.56 zu testen
1. Oben links: Project/new -> ein neues Projekt anlegen, Typ AVR Assembler
2. Project/add File -> Datei einbinden
3. F7 startet Assembler
4. Strg+F7 startet Assembler und Simulator

Kann sein, dass diese Beschreibung nicht 100% vollständig ist, aber Ihr könnt ja ein wenig probieren.

Viele Grüsse
Harry

PS: Wäre schön, wenn Ihr jetzt beschreibt, wie Ihr es gemacht habt, was dabei nicht klappt und wie man es richtig macht. Schliesslich soll doch jeder von jedem etwas lernen.

Benutzeravatar
JRaeck
Forumane
Beiträge: 337
Registriert: Samstag 24. Mai 2003, 15:23
Wohnort: Wickede (Ruhr)
Kontaktdaten:

Beitrag von JRaeck » Dienstag 17. Februar 2004, 17:33

Danke. :)
Es hat funktioniert, nachdem ich die tn15def.inc in das gleiche Verzeichnis, wie die Testdatei.c (mit deinem Code) gepackt habe. Vorher gabs einen Error.
JRaeck - N-Bahner
Bild

Benutzeravatar
Harry
Forumane
Beiträge: 2912
Registriert: Dienstag 4. Februar 2003, 12:27
Wohnort: Mache gern Urlaub an der NordOstsee
Kontaktdaten:

Beitrag von Harry » Dienstag 17. Februar 2004, 20:16

Das Übersetzen klappt, schön!

Jetzt kommen ein paar Infos zum Simulieren. Gestartet wird das mit Strg+F7. Dann gibt es ein paar Icons, die man mit dem Mauszeiger nur berühren braucht, um deren Bedeutung zu erfahren.

Ausserdem sind einige Fenster (unter "View") interessant. Dort kann man sich Variablen ("Watch") anzeigen lassen, Laufzeiten kann man messen ("Prozessor"), die Portpins betrachten ("New I/O view").

Probiert einfach mal, ändert Werte für Variablen usw. Man kann mit dem Simulator schon ganz schön spielen. Es gibt einen Einzelschrittbetrieb, oder man kann das Programm an Breakpoints stoppen lassen. Und so weiter und so fort.

Viele Grüsse
Harry

decoolegangsta

Beitrag von decoolegangsta » Mittwoch 18. Februar 2004, 17:50

Genau das selbe wollte ich auch fragen(Wegen Simulation).
@Harry
Damit du nicht denkst, das sich keiner dafür interessiert(ausser JRaeck) oder das keiner mit macht.
Ich hatte ja vor kurzem angefangen mich mit Atmel zu beschäftigen(weißt du ja) bin auch sehr weit damit.
Da ich ja selbst auch mal was schreiben möchte und veralldingen verstehen will, was die ganzen Befehle bedeuten (die du jetzt z.B. hier gezeigt hast), lerne ich gerade die Programmierbefehle.
Also damit du nicht denkst, das keiner mitmacht.
Ich verstehe schonmal die I/O-Grundlagen(ein Anfang :) ) also mit Register,in,out,DDRB,ldi..., versuche aber schnellst möglich, das ich alles verstehe.


HAb auch das AVR-Studio, und das Flash/Brennprogramm von Johann Aichinger.
Wegen dem Brennprogramm: Kann man damit noch die ATtiny15L (und AT90S2313) noch beschreiben, oder muss man sich dafür schon registrieren?

Und mit was kann ich das Programm (das du z.B. geschrieben hast) also auf die Datei (z.B. hex) bringen, das man die auf den Controller machen kann? (Geht das auch mit AVR-Studio?)

decoolegangsta

Beitrag von decoolegangsta » Freitag 20. Februar 2004, 12:08

Ich habe jetzt auch mal versucht einen Befehlscode zu schreiben, er ist sehr einfach gehalten (kann auch im Moment noch nicht mehr)
Der Controller ist hier auch ein ATtiny15L

@Harry, du kannst ihn dir mal anschauen, im Simulator funktioniert er, dann müsste es ja stimmen(hoffe ich).

Hier die ASM-Datei des Befehlscodes:

.include "tn15def.inc"


ldi r17, 0xFC
out DDRB, r17

ldi r17, 0xFC
out DDB0, r17
out DDB1, r17

ldi r17, 0xFC
out PORTB, r17

loop1: sbic PINB, 0

rjmp loop1

sbi PORTB, 4
sbi PORTB, 3

loop2: sbis PINB, 0

rjmp loop2

cbi PORTB, 4
cbi PORTB, 3

sbis PINB, 1

rjmp loop1


loop3: sbic PINB, 0

rjmp loop3

cbi PORTB, 4
cbi PORTB, 3


loop4: sbis PINB, 0

rjmp loop4

sbi PORTB, 4
sbi PORTB, 3

sbic PINB, 1

rjmp loop3

rjmp loop1

Hier ist Ende.
Die Ports sind so programmiert: PortB/pins 2-5 = Ausgänge
PortB/pin 0 = Eingang
BortB/pin 1 = Eingang


Die einzelnen Funktionen der Pins bzw. Erklärung der Funktionen:

An Pin3 und Pin4 des tiny müssen je eine Leuchtdiode mit Minus, und mit Plus nach VCC angeschlossen werden.
(Widerstand nicht vergessen!!!)
und zwei Schalter, einen an Pin1 in Ausstellung und den anderen an Pin0 auch in Ausstellung, beide müssen an +5Volt angeschlossen werden.
---------------------------------------------------------------------------
1.Abschnitt

Wenn an Pin0 (Eingang) keine Spannung = 0Volt anliegt (Schalter aus),
dann ist Schleife 1 (Loop1) schon beendet.
("sbic PINB, 0" und "rjmp loop1" = Schleife1 brechen wenn Pin0 gleich 0Volt ist,
dieser Befehl wurde gleich erfüllt)
Jetzt kommen diese Befehle:

"sbi PORTB, 4" und "sbi PORTB, 3" = Pin4 und Pin3 auf +5Volt stellen
-BEIDE LED's SIND AUS!-, denn: jetzt liegt an Pin3 und Pin4 anstatt Masse/0Volt eine Spannung von +5Volt an.
---------------------------------------------------------------------------
2.Abschnitt

Jetzt läuft das Programm zur 2. Schleife, also Schleife2, und diese läuft jetzt immer wieder durch.
(SIE WIRD NICHT BEENDET!!!)
Erst wenn am Pin0 (Eingang) eine Spannung von +5Volt anliegt (schalter auf ein/an), dann ist diese Schleife beendet.
("sbis PINB, 0" und "rjmp loop2" = Schleife2 brechen wenn Pin0 gleich +5Volt ist, also Schalter eingeschaltet wurde)
Folgende Befehle sind:

"cbi PORTB, 4" und "cbi PORTB, 3" = Pin4 und Pin3 auf 0Volt stellen
-BEIDE LED's AN!-, denn: jetzt liegt am Pin3 und Pin4 Masse/0Volt an.

Durch den Befehl "rjmp loop1" am ende von Schleife2 (loop2) wird nun wieder zur Schleife1 (loop1) zurückgesprungen.
---------------------------------------------------------------------------
3.Abschnitt

Bei Schleife1 (loop1) wieder angekommen läuft diese nun immer wieder durch.
(SIE WIRD NICHT BEENDET!!!)
Erst wenn am Pin0 (Eingang) nun wieder 0Volt anliegen (Schalter auf aus), dann ist diese Scleife beendet.
("sbic PINB, 0" und "rjmp loop1" = Schleife1 brechen wenn Pin0 (Eingang) gleich 0Volt ist,
dieser Befehl wird bei ausgeschaltetem Schalter erfüllt)
Folgende Befehle sind:

"sbi PORTB, 4" und "sbi PORTB, 3" = Pin4 und Pin3 auf +5Volt stellen
-BEIDE LED's SIND AUS!-, denn: jetzt liegt an Pin3 und Pin4 anstatt Masse/0Volt eine Spannung von +5Volt an.
.
.
Jetzt geht es wieder bei Abschnitt2 weiter, also bei: Jetzt läuft das Programm zur...,
und der erste Abschnitt wird ab jetzt weggelassen, er zählt nur am Anfang, es geht also immer von Abschnitt3 zu Abschnitt2 und wieder zu Abschnitt3 und und und.

----------------------------------------------------------------------------
4.Abschnitt

Diese Schaltung ist aufgebaut, also ob man mit einem Schalter (an Pin0)
2 Lampen/LED's (Pin3 und Pin4) einschaltet(also +5Volt) bzw. aussschaltet(also 0Volt)
Entspricht: Schalter ein = LED's ein
Schalter aus = LED's aus

----------------------------------------------------------------------------
Das ist noch nicht alles:

Mit den Befehl "sbis PINB, 1" (ausgelöst durch einschalten des Schalters an Pin1) der bei Schleife2 (vor "rjmp loop1") steht, wird der darunterstehende Befehl, nämlich "rjmp loop1" übersprungen und es geht nicht wieder zu Schleife1 (loop1) zurück sondern das Programm läuft weiter zu Schleife3 (loop3).

Loop3 und Loop4 verhalten sich wie Loop1 und Loop2.
Es läuft nun anstatt Schleife1/Loop1 und Schleife2/Loop2 so lange Schleife3/Loop3 und Schleife4/Loop4 durch, bis der Befehl "sbic PINB, 1" am Ende von Loop4 eintrifft.
(entspricht der 2. Schalter wird nun wieder ausgeschaltet)
Dann geht es wieder zu Loop1 und Loop2.

Da der 4.Abschnitt ja sinnlos wäre, wenn sich am Ablauf der einzuschaltenen LED's nichts ändern würde, sieht das ein- und ausschalten der LED's nun wie folgt aus:

Schalter ein = LED's aus
Schalter aus = LED's ein

Also verhalten sich die ersten beiden Loops (Loop1 und Loop2)
genau umgedreht zu den beiden nächsten Loops (Loop3 und Loop4)

Wer mit dieser ausführlichen Beschreibung nicht klarkommt, z.B. wegen immer wieder scrollen zum Code,
um nachzuschauen, wie das gemeint ist, der kann sich ja melden!
Dann schreibe ich hinter die einzelnen Befehle des Codes noch die Bedeutungen, da ich es aber ausfürlich machen wollte, hab ich es erst einmal so gemacht, das es auch einer versteht, der noch nicht den Befehlscode beherrscht.
Wer wagen will, den Befehlscode zu lernen der findet auf www.mikrocontroller.net (schon auf Seite 1 genannt) einen guten Start/Anfang hier rein.

P.S. für dieses Geschreibe habe ich länger gebraucht das zu formulieren als den Befehlscode zu schreiben und auszutesten :oops: .

Benutzeravatar
Harry
Forumane
Beiträge: 2912
Registriert: Dienstag 4. Februar 2003, 12:27
Wohnort: Mache gern Urlaub an der NordOstsee
Kontaktdaten:

Beitrag von Harry » Freitag 20. Februar 2004, 12:18

Toll!! Herzlichen Glückwunsch! Auch, dass der Simulator schon mal läuft.

Ich habe im Moment nicht die Zeit, mich damit zu beschäftigen. Sobald es geht tue ich es.


Viele Grüsse
Harry

decoolegangsta

Beitrag von decoolegangsta » Freitag 20. Februar 2004, 12:24

OK schon mal jetzt Danke!
Die Simulation ist garnicht so schwer, hast du ja gut beschrieben.
hab zwar ne weile gesucht, wie man die ASM-Datei in das Projekt einfügt, aber einfach nur rechte Maustaste und dann add-file.

Gruß
Patrick

decoolegangsta

Beitrag von decoolegangsta » Dienstag 16. März 2004, 16:20

Dieses Thema sollte nicht vergessen werden!

@Harry, du scheinst ja wieder da zu sein, kannst du dir denn demnächst mal den Code oben anschauen, ich hab auch noch ne Frage, und zwar:
Wie kann ich denn aus dem ASM-Code eine hex-Datei bzw. eine Datei machen, die ich dann auch brennen kann?

Gruß
Patrick

Benutzeravatar
Harry
Forumane
Beiträge: 2912
Registriert: Dienstag 4. Februar 2003, 12:27
Wohnort: Mache gern Urlaub an der NordOstsee
Kontaktdaten:

Beitrag von Harry » Dienstag 16. März 2004, 20:07

Project/Project Settings einstellen:

Output File Format:
Intel Intellec

Assembler location:
c:\...dein Pfad...\AVR Studio\avrasm32.exe

Assebler entry file:
c:\ ... Dein Pfad...\ EDIT: hier muss Dein Dateiname stehen

Jetzt F7 drücken, und es müsste ein hex-File da stehen.

Viele Grüsse
Harry
Zuletzt geändert von Harry am Mittwoch 17. März 2004, 07:48, insgesamt 2-mal geändert.

Ferry

Atmel verriegeln

Beitrag von Ferry » Mittwoch 17. März 2004, 00:09

Hi,
kann mir einer sagen ob der AT90S2313 verriegelt werden kann so das er nicht ausgelesen werden kann . Das hex File meine ich bei der Sache. Mir hat einer erzählt das durch setzen zweier Stopbits dies dann nicht mehr möglich ist ?
Gruß Ferry

Benutzeravatar
Harry
Forumane
Beiträge: 2912
Registriert: Dienstag 4. Februar 2003, 12:27
Wohnort: Mache gern Urlaub an der NordOstsee
Kontaktdaten:

Re: Atmel verriegeln

Beitrag von Harry » Mittwoch 17. März 2004, 07:45

Ferry hat geschrieben:Hi,
kann mir einer sagen ob der AT90S2313 verriegelt werden kann so das er nicht ausgelesen werden kann . Das hex File meine ich bei der Sache. Mir hat einer erzählt das durch setzen zweier Stopbits dies dann nicht mehr möglich ist ?
Gruß Ferry
Ich setze bei meinen Tinys die zwei Lockbits nach dem Flashen des hex-Files. Ob man die Lockbits irgendwie in den hex-File selbst bekommt, weiss ich nicht.

Viele Grüsse
Harry

Gast

Beitrag von Gast » Mittwoch 17. März 2004, 18:41

Wozu sind die beiden Lock- bzw. Stopbits gut?

@Harry Ich danke dir!

Wie ist das oben mit dem programmierten, würde das so funktionieren?

Bin nicht angemeldet
Gruß
Patrick

Gast

Beitrag von Gast » Mittwoch 17. März 2004, 19:06

Ich bins nochmal

@Harry
Ich hab mir das jetzt eben oben von dir nochmal durchgelesen, du hast da geschrieben "Toll Herzlichen Glückwunsch", meintest du damit, das die Progrmmierung so stimmt oder das ich überhaupt etwas geschrieben habe bzw. es verstanden habe?

Wenn du damit meintest, das das so funktionieren würde, dan erübrigt sich die Frage von eben ja.

Gruß
Patrick

Benutzeravatar
Harry
Forumane
Beiträge: 2912
Registriert: Dienstag 4. Februar 2003, 12:27
Wohnort: Mache gern Urlaub an der NordOstsee
Kontaktdaten:

Beitrag von Harry » Mittwoch 17. März 2004, 22:08

Moin Patrick,

mit "Glückwunsch" meinte ich Deine Leistung, was Du bei der Programmierung schon auf die Beine gestellt hast. Testen konnte ich das Programm nicht, aber ich möchte es ehrlich gesagt auch nicht tun. Dafür fehlt mir die Zeit. Ich denke, das Du schon weit gekommen bist, und auch noch das Testen schaffst.

Die Funktion der Lockbits steht im Datenblatt. "Hausaufgabe" für Dich: finde die Funktion heraus und schreibe sie hier nieder, dann haben alle etwas davon.

Viele Grüsse
Harry

Gast

Beitrag von Gast » Freitag 19. März 2004, 00:13

Hallo Harry,
ich bin neu hier im Forum, und habe gleich mal deinen Quellcode getestet. Dabei ist mir aufgefallen daß die Variable CntBlink2 überhaupt nicht verwendet wird.
Auf diesen Code hab ich aufgebaut und gleich noch einen Frontblitzer mit eingebaut. Eine Frage bleibt nun offen. Wie werte ich den Empfängerimpuls aus um die schönen Blinkfunktionen auch ein- und ausschalten zu können?

Viele Grüße
Klaus

nachtdieb

Beitrag von nachtdieb » Freitag 19. März 2004, 00:18

Sorry, der Beitrag war von nachtdieb. Als neuer User kennt man sich noch nicht so im Forum aus.

Grüße von
Klaus alias nachtdieb

Benutzeravatar
Harry
Forumane
Beiträge: 2912
Registriert: Dienstag 4. Februar 2003, 12:27
Wohnort: Mache gern Urlaub an der NordOstsee
Kontaktdaten:

Beitrag von Harry » Freitag 19. März 2004, 08:23

Anonymous hat geschrieben:Wie werte ich den Empfängerimpuls aus um die schönen Blinkfunktionen auch ein- und ausschalten zu können?
Am einfachsten mit einem Interrupt. Wenn der Impuls kommt, wird die Interruptroutine aufgerufen. Diese Routine durchläuft solange eine Schleife, wie der Impuls anliegt und zählt in der Zeit einen Counter hoch.

Nach dem Impulsende wird der Wert des Counters ausgewertet.

In der Interruptroutine sollte man das Hochzählen des Counters etwas ausbremsen, vielleicht durch in par NOP's. Dann erspart man sich, dass er grösser als 0xFF wird und die damit verbundene Auswertung einer 2 Byte Variablen.

Viele Grüsse
Harry

PS:
@Patrick: mit den Lockbits kannst Du verhindern, dass das Programm aus dem Prozessor ausgelesen werden kann. Also so eine Art Kopierschutz.

nachtdieb

Beitrag von nachtdieb » Freitag 19. März 2004, 09:15

Hallo Harry,
vielen Dank für den Tipp, werd ich heute Abend gleich ausprobieren.

Viele Grüße
Klaus

Antworten