Brauche ein Programm

#3840797
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
#3840900
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.
#3840904
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
Gast #3840949
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?
#3840985
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.
#3844844
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren