Forum: Mikrocontroller und Digitale Elektronik Brauche ein Programm


von Tobias M. (tomes)


Lesenswert?

hallo zusammen,
ich bin neu hier und komme gleich mit einer frage.
da ich in sachen programmierung und microcontrollern eine absolute null 
bin, dachte ich mir ich frage die experten mal. also ich möchte ein 
programm haben, mit dem ich 4 eeproms ansteuern kann. als mc habe ich an 
einen attiny45 gedacht. pb0,pb1,pb2 und pb3 sollen die ce's der eeproms 
schalten. pin 3 wird als eingang benutzt. am eingang pin 3 liegt ein 
high an. vcc liegt an pin 8. gnd an pin 4.

pb0=ce1
pb1=ce2
pb2=ce3
pb3=ce4

das programm soll mit folgendem muster starten:

ce1=0
ce2=1
ce3=1
ce4=1

dieser wert soll auch in das eeprom des attiny45 geschrieben werden.
falls vpp auf null fällt, soll der wert dennoch gespeichert bleiben.
fällt pin 3 von high auf low und danach direkt wieder auf high,
soll folgendes muster starten:

ce1=1
ce2=0
ce3=1
ce4=1

dieser wert soll auch in das eeprom des attiny45 geschrieben werden.
falls vpp auf null fällt, soll der wert dennoch gespeichert bleiben.
fällt pin 3 von high auf low und danach direkt wieder auf high,
soll folgendes muster starten:

ce1=1
ce2=1
ce3=0
ce4=1

dieser wert soll auch in das eeprom des attiny45 geschrieben werden.
falls vpp auf null fällt, soll der wert dennoch gespeichert bleiben.
fällt pin 3 von high auf low und danach direkt wieder auf high,
soll folgendes muster starten:

ce1=1
ce2=1
ce3=1
ce4=0

danach soll es wieder von vorne beginnen. es wäre super wenn sich jemand 
von euch erbarmen würden. für mich ist das leider alles chinesisch

vielen vielen dank im vorraus

: Verschoben durch User
von ich (Gast)


Lesenswert?

Hi,
soll das Hausaufgabe sein?
Wo ist dein Problem? Was soll es am ende machen?
Du hast 4 eeproms (eigenständige ICs) und willst diese reihum nach 
gewissen Bedingungen weiterschalten?
MfG
ich

von Peter II (Gast)


Lesenswert?

Etwas mitarbeiten musst du schon, helfen werden wir gerne.

Hast du schon selber angefangen mit C oder ASM?

von Shift (Gast)


Lesenswert?

Das wirst du so nicht hinbekommen. Die Registernamen werden groß 
geschrieben. Bei dir scheint aber die Shift-Taste nicht zu 
funktionieren.

von Justus S. (jussa)


Lesenswert?

Shift schrieb:
> Das wirst du so nicht hinbekommen. Die Registernamen werden groß
> geschrieben. Bei dir scheint aber die Shift-Taste nicht zu
> funktionieren.

er erwartet doch auch, dass jemand ihm das Programm schreibt, da braucht 
ja der nur der 'Helfer' eine funktionierende Shift-Taste...

von Tobias M. (tomes)


Lesenswert?

@ich : Ja, genau das soll passieren.
@PeterII: Ein bisschen C kann ich schon, einfache Programme habe ich mal 
geschrieben. Allerdings habe ich noch keinen Microkontroller 
programmiert. Angefangen habe ich nicht. Ich weiss leider nicht wo ich 
starten soll.

von dummschwaetzer (Gast)


Lesenswert?

mit

int main(void)
{
  return 0;
}

fängt man an

von mc (Gast)


Lesenswert?

Tobias M. schrieb:
> Ich weiss leider nicht wo ich
> starten soll.

z.B. hier:
http://www.mikrocontroller.net/articles/AVR-Tutorial

und hier:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Falls dann konkrete Fragen auftauchen sollten, wird dir dann in diesem 
Forum bestimmt geholfen...

von ich (Gast)


Lesenswert?

Hi,
hört sich doch super als Einstiegsprojekt an.
MfG
ich

von Karl H. (kbuchegg)


Lesenswert?

Tobias M. schrieb:

> am eingang pin 3 liegt ein
> high an.

Wer oder was bedient den Pin 3?

> falls vpp auf null fällt

Wo kommt jetzt auf einmal vpp her? Ist das der Pin 3?

> von euch erbarmen würden. für mich ist das leider alles chinesisch

Dann frage ich mich, wozu du das eigentlich brauchst?
Denn wer mit einem EEPROM umgehen kann, sollte doch eigentlich auch so 
ein einfaches Programm hinkriegen.

Oder ist das wieder so ein Modding-Projekt, wo man einer anderen 
Schaltung ein anderes EEPROM unterjubelt, damit es irgendwas macht man 
selbst aber eigentlich nicht weiß, was man da tut.

: Bearbeitet durch User
von Tobias M. (tomes)


Lesenswert?

1
Config Portb.4 = Input
2
Config Portb.0 = Output
3
Config Portb.1 = Output
4
Config Portb.2 = Output
5
Config Portb.3 = Output
6
7
8
Ce1 Alias Portb.0
9
Ce2 Alias Portb.1
10
Ce3 Alias Portb.2
11
Ce4 Alias Portb.3
12
13
14
15
Dim B As Byte
16
Readeeprom B , 1
17
18
If B = 1 Then
19
Goto Rom1
20
Elseif B = 2 Then
21
Goto Rom2
22
Elseif B = 3 Then
23
Goto Rom3
24
Elseif B = 4 Then
25
Goto Rom4
26
Elseif B = 0 Then
27
Goto Rom1
28
End If
29
30
Anfang:
31
Rom1:
32
33
Ce1 = 0
34
Ce2 = 1
35
Ce3 = 1
36
Ce4 = 1
37
38
39
Portb.4 = 1
40
B = 1
41
Writeeeprom B , 1
42
43
44
If Portb.4 = 0
45
Waitms 500
46
Portb.4 = 1
47
Then Goto Rom2
48
End If
49
50
Rom2:
51
52
Ce1 = 1
53
Ce2 = 0
54
Ce3 = 1
55
Ce4 = 1
56
57
Portb.4 = 1
58
B = 2
59
Writeeeprom B , 1
60
61
62
If Portb.4 = 0
63
Waitms 500
64
If Portb.4 = 1
65
Then Goto Rom3
66
End If
67
68
Rom3:
69
70
71
Ce1 = 1
72
Ce2 = 1
73
Ce3 = 0
74
Ce4 = 1
75
76
Portb.4 = 1
77
B = 3
78
Writeeeprom B , 1
79
80
81
If Portb.4 = 0
82
Waitms 500
83
If Portb.4 = 1
84
Then Goto Rom4
85
End If
86
87
Rom4:
88
89
Ce1 = 1
90
Ce2 = 1
91
Ce3 = 1
92
Ce4 = 0
93
94
Portb.4 = 1
95
B = 4
96
Writeeeprom B , 1
97
98
99
If Portb.4 = 0
100
Waitms 500
101
If Portb.4 = 1
102
Then Goto Rom1
103
End If
104
105
106
Goto Anfang
107
108
End


Das habe ich bisher

: Bearbeitet durch User
von BT (Gast)


Lesenswert?

Hallo,

also so wie das hier in dem Pseudocode gepostet ist, sollte es mit 
BASCOM wenig Probleme geben die gestellte Aufgabe zu lösen.

Grüße
BT

von Peter II (Gast)


Lesenswert?

BT schrieb:
> also so wie das hier in dem Pseudocode gepostet ist, sollte es mit
> BASCOM wenig Probleme geben die gestellte Aufgabe zu lösen.

ist zwar nett von dir, aber die gotos müssen hier nicht wirklich sein. 
Kann man denn ein BASCOM nicht sauber programmieren?

von Helmut L. (helmi1)


Lesenswert?

Peter II schrieb:
> Kann man denn ein BASCOM nicht sauber programmieren?

BASCOM wurde in Echternach entwickelt waehrend der Springprozession. Da 
macht man immer 2 vor und einer zurueck :-)

http://de.wikipedia.org/wiki/Echternacher_Springprozession

von Aufmerksamer Leser (Gast)


Lesenswert?

Helmut Lenzen schrieb:
> BASCOM wurde in Echternach entwickelt waehrend der Springprozession. Da
> macht man immer 2 vor und einer zurueck :-)

Dich habe ich für Intelligenter gehalten. Wie man sich täuschen kann.
:-(

von Karl H. (kbuchegg)


Lesenswert?

Tobias M. schrieb:

> Das habe ich bisher

So schlecht ist das gar nicht.
Mit der Auswertung des Inputs stehst du noch ein wenig auf Kriegsfuss.
Leg deinen bisherigen Code zur Seite und beschftige dich doch mal damit, 
wie man an einem Input erkennt, dass ein Pegelwechsel stattfindet, bzw. 
wie man auf einen Pegelwechsel wartet.
Und studier ein wenig, welche Basis-Strukturen du eigentlich zur 
Verfügung hast. Neben if und goto gibt es da noch mehr. Du wirst zum 
Beispiel ein WHILE brauchen.

von Tobias M. (tomes)


Lesenswert?

$regfile = "attiny45.dat"
$crystal = 1000000
$hwstack = 40
$swstack = 16
$framesize = 32

Config Portb.4 = Output
Portb.4 = 0

Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output


Ce1 Alias Portb.0
Ce2 Alias Portb.1
Ce3 Alias Portb.2
Ce4 Alias Portb.3

Dim B As Byte
Readeeprom B , 1

If B = 1 Then
Goto Rom1
Elseif B = 2 Then
Goto Rom2
Elseif B = 3 Then
Goto Rom3
Elseif B = 4 Then
Goto Rom4
End If


Anfang:

Rom1:

Config Portb.4 = Output
Portb.4 = 0


Ce1 = 0
Ce2 = 1
Ce3 = 1
Ce4 = 1


Portb.4 = 1
B = 1
Writeeeprom B , 1
Config Pinb.4 = Input



Bitwait Pinb.4 , Reset
Wait 2
Bitwait Pinb.4 , Set


Rom2:
Config Portb.4 = Output
Portb.4 = 0

Ce1 = 1
Ce2 = 0
Ce3 = 1
Ce4 = 1


Portb.4 = 1
B = 2
Writeeeprom B , 1
Config Pinb.4 = Input



Bitwait Pinb.4 , Reset
Wait 2
Bitwait Pinb.4 , Set

Rom3:
Config Portb.4 = Output
Portb.4 = 0


Ce1 = 1
Ce2 = 1
Ce3 = 0
Ce4 = 1

Portb.4 = 1
B = 3
Writeeeprom B , 1
Config Pinb.4 = Input



Bitwait Pinb.4 , Reset
Wait 2
Bitwait Pinb.4 , Set

Rom4:
Config Portb.4 = Output
Portb.4 = 0

Ce1 = 1
Ce2 = 1
Ce3 = 1
Ce4 = 0


Portb.4 = 1
B = 4
Writeeeprom B , 1
Config Pinb.4 = Input



Bitwait Pinb.4 , Reset
Wait 2
Bitwait Pinb.4 , Set

Goto Anfang

End



Das ist jetzt das Programm. Läuft auch soweit gut, jedoch nicht 100%ig 
wie ich es möchte. Die Funktion, mit der auf die Änderung des Pegels an 
einem Eingang gewartet wird, heisst wohl bitwait. Ich hoffe das ist 
richtig so. Ich möchte allerdings das das Programm nur dann ein Rom 
weiter schaltet, wenn an Pinb.4 ein high ist, dann ein low und direkt 
danach wieder ein high. Mit Wait 2 funktioniert das so irgendwie nicht. 
Könnt ihr mir einen Tip geben?

von Wolfgang A. (Gast)


Lesenswert?

Tobias M. schrieb:
> Könnt ihr mir einen Tip geben?

Um ohne das fehlerträchtige und deshalb nicht zu Unrecht viel gehaßte 
GOTO auszukommen, könntest du das Select...Case Statement verwenden 
und damit dein Programm auch übersichtlicher gestalten.

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.