-
hi
habe gerade das gleiche problem: den attiny25 ad-wandler unter
bascom zum laufen zu bringen.
er soll mit ref=2,56V an ADC1 einen wert einlesen.
nach deiner anleitung wäre das Getadc(1 , &H90) bzw. Getadc(&H91)
klappt aber nicht.... wo mache ich da den fehler ?????
-
was meckert ihr so , im index in der bascomhilfe einfach config adc eingeben und der himmel öffnet sich. ich weiss garnicht, was ihr da so kompliziert herumsucht.
mfg
-
@roboterheld
schau mal auf das Datum, seitdem hat sich schon einiges geändert !
@hütti
ein wenig mehr Infos könnten wir noch brauchen,
zB. welche Bascom Version, denn ein paar Bugs sind schon behoben, dafür evtl. wieder andere mit dabei :-k
Aber Grundsätzlich sollte das mit Config ADC jetzt hinhauen,
hab das heute aber noch nicht überprüft.
-
wer eine gekaufte version von bascom hat, aktualisiert immer auf den neuesten stand !
wer eine raubkopie hat wird diese nicht aktualisieren können und wer die freeware-4kbyte hat , ist 2 monate im rückstand mit der info.
mfg
-
@roboterheld
wenn ich hier eine frage stelle, habe ich keinen bock angemacht zu werden,
von wegen ich wäre ein raubkopierer oder so.
komm mal runter!
@linux
also, meine bascom-version ist die 8.9beta, vollversion.
ich möchte mit dem ad-wandler und einem attiny die spannung eines
akku's messen und wenn die einen bestimmten wert unterschreitet,
eine LED blinken lassen. habe schon diverse projekte mit bascom
programmiert, mit einem mega8 geht der code. nur der attiny zickt.
habe das normale config und alle erdenklichen variationen schon
probiert. hier mal der code
Code:
'======================================================
'System-Einstellungen
'======================================================
'Definition für ATtiny 25
$regfile "attiny25.dat"
$crystal = 8000000
'======================================================
'Konfigurationen
'======================================================
Dim X As Word
Config Pinb.3 = Output
'Konfiguration des AD-Wandlers
Config Adc = Single , Prescaler = Auto , Reference = 6 'interne 2,56V ref
Start Adc
Wait 3
'messen
'X = Getadc(0 , &H80)
X = Getadc(1)
'0,5s warten
Waitms 500
'prüfen ob kleiner als
If X < 10 Then Goto Akku_fail
End
'******************************************************
' Akku Fail
'******************************************************
Akku_fail:
'Rote LED blinken lassen in Schleife
Led:
Portb.3 = 0
Waitms 300
Portb.3 = 1
Waitms 300
Goto Led
Return
so sollte es eigentlich gehen, wie gesagt, diese "hex-varianten" habe
ich auch getestet. der AD-eingang ist pin 7.
der AD-wandler scheint immer eine 0 auszugeben, da die LED ständig
blinkt, d.h. keine werte über 10. die eingangsspannung ist aber
hoch genug !
danke für eure hilfe ![/code]
-
Ich hab nur die .8.8 am laufen,
und da gibts einen Bug in der Adresse des Registers zum starten des ADCs, deshalb funktioniert das auf den Tinys25/45/85/24/44/84 nicht, es kommt immer 0 raus, oder was grad im ADC-Register stand.
Das hab ich aber hier schon mal irgendwo gepostet :-k
Hier war das:
https://www.roboternetz.de/phpBB2/vi...=297035#297035
-
@linux
das ist ja blöd, d.h. man bekommt den wandler nicht gestartet.
könnte man das nicht unter assembler erledigen? ich bin da nicht
so bewandert drinne, hättest du einen "tip" ?
habe gerade gelesen, das man falsche register-einträge in den
dat-files editieren kann. oder könnte man den wandler durchgehend
laufen lassen und nur das register auslesen.
wie ist mir wurst, hauptsache ich kann was messen
für das gleiche projekt benötige ich noch einen timer.
gehen die, oder gibt es da auch noch stolperfallen?
ich frage, da ich mir am ad-wandler fast 6 stunden vergeblich einen
abgebrochen habe 8-[
ciao
hütti =D> =D>
-
ich habe gerade diesen code ( laut rn wissen ) probiert: wieder nix.
ich bin wohl zu blöde .......
Code:
'======================================================
'System-Einstellungen
'======================================================
'Definition für ATtiny 25
$regfile "attiny25.dat"
$crystal = 8000000
'======================================================
'Konfigurationen
'======================================================
Dim X As Word
Config Pinb.3 = Output
Wait 2
'CONFIG Adc = Single , Prescaler = Auto ( 64 )
LDI r24,0x06
!Out Adcsr , R24
'START ADC
SBI ADCSR,ADEN
' ADC-Kanal-Nummer & Ref.1,1V nach Register 24
LDI r24,0x81
' in den ADC-Multiplexer
!Out Admux , R24
' Aufruf der getadc-funktion
!Call L_0x00f6
' laden der Ergebnisadresse (DIM X AS WORD)
LDI XL,0x63
LDI XH,0x00
' Speichern ergebnis (R24:r25) in "X"
ST X+,r24
ST X,r25
If X < 100 Then Goto Akku_fail
End
'******************************************************
' Akku Fail
'******************************************************
Akku_fail:
'Rote LED blinken lassen in Schleife
Led:
Portb.3 = 0
Waitms 300
Portb.3 = 1
Waitms 300
Goto Led
'******************************************************
L_0x00f6:
SBI ADCSR,ADSC ' Starten der 1. Konversion
L_0x00f8:
SBIC ADCSR,ADSC ' Fertig ?
RJMP L_0x00F8 ' nein, Loop1
SBI ADCSR,ADSC ' Starten der 2. Konversion
L_0x00fe:
SBIC ADCSR,ADSC ' Fertig ?
RJMP L_0x00FE ' nein, Loop2
IN r24,ADCL ' Ergebnis auslesen r24:r25
IN r25,ADCH
RET ' fertig
-
Das SRAM beginnt bei diesem AVR bei 0x60,
die erste Variable wird warscheinlich auch dort hingelegt, im Assemblerteil wird aber der ADC-Wert bei 0x63 abgelegt, da finden sich die beiden nicht zusammen !
Entweder die Variable fest anlegen mit "At &H63"
oder die Adresse im Assemblerteil nach 0x60 ändern.
Es gibt da aber auch die Möglichkeit, direkt die Adresse im SRAM zur Variable herauszufinden :-k
Steht auf dieser Seite:
https://www.roboternetz.de/wissen/in...Cr_Bascom-User
zB.:
Code:
lds r24, {Meinfeld}
' bzw.
STS {Meinfeld}, R24
Den Rest kannst du ja in Bascom schreiben, nur den GetAdc-aufruf mit ASM.
-
Hallo,
ich hätte noch einen Workaround, den Du probieren könntest,
also,
im Bascomverzeichnis ist das Lib-Unterverzeichnis,
darin gibts eine mcs.lbx (das ist die vorkompilierte Version der ganzen Funktionen die es so gibt).
Von dieser Datei erstmal einen Sicherungskopie machen, denn wir wollen das original etwas ändern :-)
Diese Datei mit einem Texteditor öffnen, und nach Getadc suchen.
dann so ändern, und wieder speichern
Code:
[_GETADC]
_GetADC:
#IF _CHIP >30
* In R24, ADCSR
.OBJ 6C80
* Out ADCSR , R24
_GetADC_1:
* In R24, ADCSR
Dann im Project mit dem Tiny25 die ganz normalen ADC-Befehle verwenden, neu Kompilieren, und schauen ob das passt was ich erfunden habe :-)
Ich habs zwar kompiliert, und nach geschaut was draus geworden ist, aber kann es nicht am lebenden Objekt testen, da ich grad keine passende Umgebung da habe.