Also das Datenbaltt sag einen maximalen Strom von +/- 100nA vorraus. Bei einem 1k Widerstand hättest du also im Maximum einen Spannungsabfall von 0,0001 Volt (wenn ich mich ni verrechnet habe).
Das Problem liegt also irgendwo anders...
Also das Datenbaltt sag einen maximalen Strom von +/- 100nA vorraus. Bei einem 1k Widerstand hättest du also im Maximum einen Spannungsabfall von 0,0001 Volt (wenn ich mich ni verrechnet habe).
Das Problem liegt also irgendwo anders...
Hmm scheinbar wirklich ja.....
na mal guggen... wenn der atmel drinne steckt werd ich warscheinlich eh keinen R mehr brauchen...
Denke ich auch. Drücke dir auf jeden Fall die Daumen!!
Für mich steht demnächst ein ähnliches Projekt an. Bin auch grad beim Einstieg in das Thema!
Also der Widerstand vom Gate gegen Source ist, sobald das Gate mal aufgeladen ist, "unendlich".
Somit teilt sich die Spannung im Verhältnis irgendwas Kiloohm zu unendlich auf -> Quasi die gesamte Spannung fällt über der Gate-Source-Strecke ab...
Bei MOSFETs fließt nur ein nennenswerter Gatestrom, wenn das Gate umgeladen wird. Sonst nicht. Das ist ja gerade der Witz an FETs. Und an einem Gatewiderstand fällt dann natürlich auch nur Spannung ab, wenn ein Umladestrom fließt. Der Gatewiderstand begrenzt den maximal fließenden Strom, der gerade bei großen FETs beachtlich werden kann. Es könnte also sein, dass µC etwas abbekommen hat. Ich kenne mich mit den Atmels nicht so aus, aber die vertragen an den Portpins sicherlich auch nur einige zehn Milliampere, wenn's hochkommt. Deshalb ist ein Gatewiderstand Pflicht.
Wenn der FET nicht einschalten wollte, hätte es vieleicht auch an einer Portkonfiguration als Open-Collector Ausgang liegen können (da braucht man einen externen Pull-Up-Widerstand), aber können die Atmegas das überhaupt?
[ReadAllMode] Äh, ja, ok. Sorryyyyyyyyy!
Sooo!
Habe gestern das Eva Board von Pollin und die Controller gekriegt und mich seitdem eingehendst damit befasst...
Habe auch gleich ne Frage.
In vielen Tuts arbeiten die Leute die Taster oder Schalter mittels INT0 oder INT1 ab, nachdem der Atmega8 aber nur 2 Interrupts hat kann ich da ja auch nur 2 Taster verwenden... Wie mach ich das aber wenn ich beispielsweiße 3 oder 4 Taster verwenden möchte?
Werd aus den ganzen Programmen nicht schlau
mfg
Tommy
das hängt von dem verwendeten µC ab...
wenn du nur 2 externe interupts hast kannst du auch nur 2 verwenden...
du kannst aber auch noch software interupts verwenden...dann musst du halt den taster auch städig mit abfragen was nicht so das gelbe vom ei ist...
hier mal ne gute übersicht:
und wie funzt das software seitig?
hab schon einiges probiert und kriegs nicht wirklich hin
kurze frage..habe es beim schnellen überfliegen nicht finden können..
welche sprache nutzt du überhaupt zum programmieren?
sry ganz vergessen
Bascom, also Basic...
Noch ne Frage... Kann ich für PWM NUR die PWM Ausgänge nutzen (also OC1A, OC1B und OC2)?
guck dir das mal an
http://www.rowalt.de/mc/avr/avrboard/05/avrb05.htm
nein...auch da gibt es wieder nen unterschied.....das sind hardware pwm ausgänge.....
du kannst auch per software pwm machen...das geht aber wieder zulaten der rechenleistung->du kannst weniger nebenbei machen..
Und die Hardware PWM ausgänge funzen ja über den PWM Timer richtig? reicht da denn ein Timer oder MUSS ich da pro Kanal einen nehmen?
ist auch schon bissl her wo ich das mal gemacht habe...
aber ich glaube die timer sind an die jeweiligen pins gebunden...heißt aber nicht das timer0 nur einen pin haben kann...guck dir am besten mal das datenblatt deines avrs an
daraus werd ich auch nicht schlau
schreib doch mal hierrein welche passage du nicht verstehst...
aber alles erklären tut dir bestimmt keiner:) oder übersetzten....ein bischen eigeninitiative ist schon gefragt:P
OK.
Hab mich mal mit PWM versucht.
Das ganze sollte wie folgt laufen:
Taster1 -> Heller
Taster2 -> Dunkler
Taster3 -> Das ganze auf nen fixen wert einstellen
Led1 und Led2 sollte klar sein
Hier mein Programm:
$regfile = "m8def.dat"
$crystal = 1000000
Config Portd.5 = Output
Config Portd.6 = Output
Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input
On Timer0 Timer_isr 'Interrupt-Routine für Timer0-Overflow
Config Timer0 = Timer , Prescale = 1
Enable TIMER0 'Timer0-Overflow-Interrupt einschalten
Enable Interrupts 'Interrupts global zulassen
Dim Zaehler As Byte
Dim Laenge As Byte
Dim Fixwert As Byte
Laenge = 254
Fixwert = 200
Led1 Alias Portd.5
Led2 Alias Portd.6
S1 Alias Pind.2 'Schalter "Increase"
S2 Alias Pind.3 'Schalter "Decrease"
S3 Alias Pind.4 'Schalter "Fixwert"
Do
If Zaehler > Laenge Then
Led1 = 1
Led2 = 1
Else
Led1 = 0
Led2 = 0
End If
Zaehler = Zaehler - 1
Loop
Timer_isr:
If S1 = 1 Then
Laenge = Laenge - 1
Elseif S2 = 1 Then
Laenge = Laenge + 1
Elseif S3 = 1 Then
Laenge = Fixwert
End If
Return
Alles anzeigen
Jetzt is das Problem, dass ich eben den Wert "Laenge" bei Tastendruck nicht um 1 erhöhe, sondern je nachdem wie lang ich oben. Heist also die "Flankenabfrage" fehlt... Wie krieg ich die hin?
So hab das ganze jetzt wie folgt gelöst:
$regfile = "m8def.dat"
$crystal = 1000000
On Int0 Heller
On Int1 Dunkler
On Ovf0 Timer_isr
Config Portd.5 = Output
Config Portd.6 = Output
Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input
Config Int0 = Rising
Config Int1 = Rising
Config Timer0 = Timer , Prescale = 8
Led1 Alias Portd.5
Led2 Alias Portd.6
S1 Alias Pind.2
S2 Alias Pind.3
S3 Alias Pind.4
Enable Timer0
Enable Interrupts
Enable Int0
Enable Int1
Start Timer0
Dim Zaehler_blau As Byte
Dim Laenge_blau As Byte
Dim Fixwert_blau As Byte
Dim Zaehler_rot As Byte
Dim Laenge_rot As Byte
Dim Fixwert_rot As Byte
Laenge_blau = 200
Laenge_rot = 200
Fixwert_blau = 230
Fixwert_rot = 0
Do
If Zaehler_blau > Laenge_blau Then
Led1 = 1
Else
Led1 = 0
End If
Zaehler_blau = Zaehler_blau - 1
If Zaehler_rot > Laenge_rot Then
Led2 = 1
Else
Led2 = 0
End If
Zaehler_rot = Zaehler_rot - 1
Loop
Heller:
If Laenge_blau < 244 Then
Laenge_blau = Laenge_blau + 10
End If
If Laenge_rot > 12 Then
Laenge_rot = Laenge_rot - 10
End If
Return
Dunkler:
If Laenge_blau > 12 Then
Laenge_blau = Laenge_blau - 10
End If
If Laenge_rot < 244 Then
Laenge_rot = Laenge_rot + 10
End If
Return
Timer_isr:
If S3 = 1 Then
Laenge_blau = Fixwert_blau
Laenge_rot = Fixwert_rot
End If
Return
Alles anzeigen
Ist zwar etwas unschön in meinen Augen, aber bei nem Fixwert ist egal "wie lange man am Taster bleibt
Jetzt noch eine Frage: Mir is aufgefallen dass die LED's flackern... Woran liegt das? Am Timer? An der Frequenz des Quarzes? Wie änder ich das?
mfg
Tommy
Wenn du in die ISR noch nen waitms packst hast du mehr Zeit die Taste los zu lassen bevor wieder eins weitergezählt wird.
Wenn die LED flackert kannst du den Prescaler des Timer ändern. Je kleiner je höher die PWM Frequenz. Bei 1Mhz Takt sollte mit dem Prescaler 8 allerdings eine PWM Frequenz von 500Hz erreicht werden Da sollte nix mehr flackern.
Flackern die LEDs immer oder nur bei bestimmten Zuständen Z.B. bei kleinen PWM Werten 0-10.