Forum: Mikrocontroller und Digitale Elektronik ATTINY45 INPUT PORTB5 funktioniert nicht


von Bernd (Gast)


Lesenswert?

Hallo,

manchmal ist es zum weinen, wenn man einen Fehler nicht findet. Also ich 
habe einen ATTINY45 in der Arbeit und möchte alle Pins nutzen.

' 1 = PB5 / Schalter Bit 4
' 2 = PB3 / Schalter Bit 3
' 3 = PB4 / Schalter Bit 2
' 4 = GND
' 5 = OC0A / PWM Ausgang
' 6 = PB1 / Schalter Bit 1
' 7 = ADC1 / Eingang
' 8 = VCC

Ich hänge über Pulldown einen Schalter an die Ports 1,3,4,5. Habe einen 
Analog-Digital Eingang und möchte eine Spannung über den OC0A Ausgang 
als PWM ausgeben. Im Versuch taste ich die Eingangsspannung (0-5V) ab 
und gebe diese als PWM Signal aus. Alles prima. Nun möchte ich den 
Schalter noch ins Spiel bringen PB1, PB3, PB4 wird erkannt und 5 Volt 
werden als High bzw. GND als Low prima erkannt.

Nur PB5 funktioniert nicht. PB5 will trotz setzen von in BASCOM

...
Config Adc = Single , Prescaler = Auto
Config Portb = Input
Portb = &HFF
Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Clear Down
...

keinen Input liefern. Die Abfrage:

   Schalter.0 = Pinb.1
   Schalter.1 = Pinb.3
   Schalter.2 = Pinb.4
   Schalter.3 = Pinb.5

berücksicht PB5 nicht und mein Voltmeter zeigt 0,8 V ohne angelegte 5 
Volt Spannung bzw. mit Schalter schöne 5 V an. Mich wundern die 0,8 V, 
die ich nicht auf den anderen Ports habe.

Habe ich den ATTINY45 schon überfordert und PB5 kann nicht genutzt 
werden bei gleichzeitiger Nutzung von PWM und ADC ?

Gruß

Bernd

von Walter (Gast)


Lesenswert?

da du die Fuses nicht erwähnt hast: hast du die Fuses richtig gesetzt?

von Bernd (Gast)


Lesenswert?

Hallo,

ich habe die FUSE nicht verändert. Ein Versuch RSTDISBL zu aktivieren 
führte dazu, dass ich den ATTINY nicht mehr ansprechen kann. Wenn es 
daran liegt muß ich den ATTINY dann anders als mit ISP programmieren ? 
Falls ja wie bzw womit ?

von Peter D. (peda)


Lesenswert?

Bernd wrote:
> Wenn es
> daran liegt muß ich den ATTINY dann anders als mit ISP programmieren ?
> Falls ja wie bzw womit ?

Z.B.:

Beitrag "UART Bootloader ATtiny13 - ATmega644"


Peter

von Bernd (Gast)


Lesenswert?

Hallo,

sorry, das mit dem Bootloader habe ich nicht ganz verstanden. Ist es 
richtig das es am RSTDISBL liegt ? Gibt es nicht einen einfachen 
parallelen Programmer oder so etwas ?

Bernd

von Johannes M. (johnny-m)


Lesenswert?

HV parallel programming geht nur mit AVRs, die genügend Pins dafür 
haben. Bei den kleinen gibts dafür HV serial programming. Und wenn Du 
den RESET abschaltest, um den Pin als I/O zu verwenden, dann geht ISP 
eben nicht mehr, weil dafür der RESET benötigt wird. Andererseits kann 
PB5 natürlich auch nur dann als I/O verwendet werden, wenn die 
RESET-Funktion abgeschaltet wird.

von Bernd (Gast)


Lesenswert?

Hallo,

danke für die Antwort. Kann ich denn mit einer HV Seriellprogrammierung 
mein Problem lösen und welchen Programmer brauche ich dann ?

Gruß

Bernd

von Peter D. (peda)


Lesenswert?

Bernd wrote:
> sorry, das mit dem Bootloader habe ich nicht ganz verstanden.

Ein Bootloader ist ein Programm, was man in den Chip programmiert, damit 
der sich selbst programmieren kann.

Der Vorteil ist, daß man dann keine speziellen Pins mehr benötigt, 
sondern das Interface so programmieren kann, wie man lustig ist.

Z.B. mein Bootloader kann direkt über die UART programmieren, sogar nur 
über einen Pin.
Man sucht sich also irgendeinen Pin aus für die UART, brennt den 
Bootloader ein und überprüft, ob er funtioniert.
Dann setzt man die RSTDISBL-Fuse und kann nun alle 6 Pins benutzen.

Der Pin für die UART lauscht nur direkt nach dem Einschalten (0,3s) auf 
das Paßwort zum neu Programmieren. Danach ist er ganz normaler IO-Pin.


Ein Bootloader kann nur neue Programme aufspielen, die Fuses kann er 
nicht ändern.


Peter

von Bernd (Gast)


Lesenswert?

Hallo,

okay, ich habe verstanden:

1. Ich installiere den Bootloader
2. Ich teste (weiß noch nicht wie..) die Funktion
3. Dann setze ich den RSTDISBL-Fuse
4. Das Programm kann dann mit dem Bootloader übertragen werden.

Was mir noch nicht klar ist: Ich programmiere zur Zeit über ein USB-ISP 
Interface. Brauche ich für das Laden des Programmes ein anderes 
Interface oder womit mache ich das ?

Gruß

Bernd

von Johannes M. (johnny-m)


Lesenswert?

Den Bootloader kannst Du wie ein ganz normales Programm über einen 
beliebigen AVR-tauglichen Programmer in den µC schreiben.

von Bernd (Gast)


Lesenswert?

Hallo,

das war mir schon klar, aber mit welchem Programm bekomme ich das 
eigentliche Programm auf den Prozessor ?

Bernd

von Peter D. (peda)


Lesenswert?

Bernd wrote:

> 2. Ich teste (weiß noch nicht wie..) die Funktion

Schreib ein Programm, z.B. ne LED blinken lassen, lad es mit dem 
Bootloader rein und wenn dann die LED blinkt, hats geklappt.

> Was mir noch nicht klar ist: Ich programmiere zur Zeit über ein USB-ISP
> Interface.

Hängt ganz von Bootloader ab.
Z.B. einen UART-Bootloader hängste an die COM oder nen COM-USB Adapter.

Zum Bootloader gehört meistens noch ein PC-Frontend, dem man das zu 
brennende Hexfile übergibt.


Peter

von Walter (Gast)


Lesenswert?

aus den 3 Pins für den Schalter kannst du auch einen Pin machen indem du 
mit den Schaltern verschiedene Spannungen anlegst und per ADC misst.
Ein Bootloader braucht evtl. die paar Bytes die einem am Ende fehlen ...

von Bernd (Gast)


Lesenswert?

Hallo,

ich bin seit 6 h nun am Bootloader und bekomme es einfach nicht hin. Was 
habe ich gemacht ?

1. Bau eines Eindrahtinterfaces gemäß Anleitung 1WIRE.PDF, Verwendung 
Port 2

2. Anschluß des Interfaces an COM3 per USB-Seriell Adapter

3. Änderung des Bootloaders auf (Name ATTY45.ASM):

.nolist
.include "tn45def.inc"

.equ  CRC        = 17    ; 17 = additional code size
.equ  VERIFY      = 15
.equ  ONEWIRE      = 3

;----------------------------------------------------------------------- 
--
;                               Port definitions
;----------------------------------------------------------------------- 
--
.equ    STX_PORT        = PORTB
.equ    STX_DDR         = DDRB
.equ    STX             = PB2


.equ    SRX_PIN         = PINB
.equ    SRX_DDR         = DDRB
.equ    SRX_PORT        = PORTB
.equ    SRX             = PB2
;----------------------------------------------------------------------- 
--
.include "fastload.inc"
;----------------------------------------------------------------------- 
--

4. Änderung der Taktfrequenz in FASTLOAD.H

.equ  XTAL    = 1000000  ; 1MHz, not critical

5. Kompilieren

avrasm2.exe -fI ATTY45.ASM

6. Brennen mittels AVRFLASH und Änderung FUSEBIT auf SELFPRGEN = ON. 
Rest standard.

7. ATTINY45 auf mit 1 Drahtinterface verbunden und FBOOT17 gestartet:

fboot17 /C3 /TEST.HEX

COM 3 at 115200 Baud: /

=> LEIDER FINDET KEINE VERBINDUNG STATT. Was nun ?

Gruß

Bernd

von Bernd (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe jetzt noch das Protokoll der COM3 Schnittstelle aufgezeichnet 
(siehe Anlage), er bekommt einfach keinen Connect.

Bernd

von Peter D. (peda)


Lesenswert?

Bernd wrote:
> .equ  XTAL    = 1000000  ; 1MHz, not critical

> => LEIDER FINDET KEINE VERBINDUNG STATT. Was nun ?

Naja, zaubern kann der AVR nicht.

Mit 1MHz kriegst Du keine 115200 Baud mehr.

Probier mal 4800.


Peter

P.S.:
Bei nicht Batteriebetrieb würde ich immer auf 8MHz setzen.

von Bernd (Gast)


Lesenswert?

Gerne,

allerdings weiß ich nicht wie ich das einstelle . Wie ruft man die 
möglichen Parameter von FBOOT auf ?

Bernd

von Bernd (Gast)


Lesenswert?

Habe ich jetzt durch Probieren gefunden, leider kein Unterschied:

D:\AUTOTE~1\ATMELP~1\BOOTLO~1\fboot17>fboot17 /C1 /B4800 /TEST.HEX
COM 1 at 4800 Baud: |

findet nichts ?

Bernd

von Bernd (Gast)


Lesenswert?

Hi,

ich habe jetzt das ganze auf 8 MHz geändert. CKDIV8 disabled und in 
Fastload.h Frequenz auf 8000000 gestellt. Leider keine Veränderung. 
Findet nichts.

Bernd

PS Wie kann ich prüfen, ob eine Kommunikation überhaupt ankommt, habe 
OSCAR hier stehen ?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Schon paar Tage her...

Bernd wrote:

> Gibt es nicht einen einfachen
> parallelen Programmer oder so etwas?

Der AVR Dragon kann HVSP programmieren.

von Peter D. (peda)


Lesenswert?

Bernd wrote:

> PS Wie kann ich prüfen, ob eine Kommunikation überhaupt ankommt, habe
> OSCAR hier stehen ?

Ja, kannst an den Pin PB2 antasten, da muß dann das Paßwort (invertiert) 
zu sehen sein.
Der PC sendet es ständig, bis der AVR antwortet.


Peter

von Bernd (Gast)


Lesenswert?

Hallo,

ich sehe nur ein gleichmäßige Sinusschwingung mit geringer Amplitude.

Bernd

von Peter D. (peda)


Lesenswert?

Bernd wrote:

> ich sehe nur ein gleichmäßige Sinusschwingung mit geringer Amplitude.

Du hast doch die Eindrahtschaltung an PB2 angeschlossen, wie Du es 
definiert hast?


Peter

von Bernd (Gast)


Lesenswert?

Ja, natürlich,

werde jetzt das 2-Draht Interface probieren.

Bernd

von Peter D. (peda)


Lesenswert?

Bernd wrote:

> ich sehe nur ein gleichmäßige Sinusschwingung mit geringer Amplitude.

Du mußt die Daten als 0V/5V-Pegel sehen.

Miß mal an Pin3 des DB9, da müssen es mindestens -6V/+6V sein.

Hast Du die richtige COM ausgewählt?

Der ATtiny hat auch VCC=5V angeschlossen?


Peter

von Bernd (Gast)


Lesenswert?

Also, zu meinem Stand der Verzweifelung: 2-Draht Interface mit MAX 
gebaut.

Leider das gleiche Symptom, er nimmt keine Verbindung auf (Vorher 
Programm natürlich auf 2 Drahtkommunikation geändert T45.ASM im 
Original)

Du mußt die Daten als 0V/5V-Pegel sehen.

=> Sehe leider nichts. Bei 2 Draht auf PIN 2 RS232 Stecker huscht ab und 
zu ein PEAK vorbei.

Miß mal an Pin3 des DB9, da müssen es mindestens -6V/+6V sein.
=> Leider nicht

Hast Du die richtige COM ausgewählt?
=> Klar, mein GPS EMpfänger wird auf dem gleichen Port erkannt.

Der ATtiny hat auch VCC=5V angeschlossen?
=> JA, natürlich


Peter

von Stefan W. (wswbln)


Lesenswert?

...wie wär's zur Abwechslung mal mit dem Posten des Schaltplanes (NICHT 
als JPG!)? Da scheint ja eher was mit der Hardware nicht zu stimmen...

Welche Frequenz hat deine oben beobachtete "Sinusschwingung"?
Wie sieht das Ganze auf dem Oszi aus, wenn das GPS dran ist?

von Peter D. (peda)


Lesenswert?

Bernd wrote:

> => Sehe leider nichts. Bei 2 Draht auf PIN 2 RS232 Stecker huscht ab und
> zu ein PEAK vorbei.

Dann ist der Bootloader aktiv.

> Miß mal an Pin3 des DB9, da müssen es mindestens -6V/+6V sein.
> => Leider nicht

Dann ist was faul im PC.
Irgendein Programm blockiert die UART.
Oder ein Treiber klingt sich ein, sperrt aber die Funktionen für die 
DOS-Box. Das kann auch ein Treiber für den LPT-Port sein.

Wenn Du wirklich die richtige COM eingestellt hast, dann starte mal das 
Programm. Wenn Du dann den USB-UART-Adapter abziehst, muß ne 
Windows-Fehlermeldung kommen.

Starte mal nen UART-Sniffer, da muß dann zu sehen sein, wie ständig das 
Paßwort gesendet wird. Und wenn der DB9-Stecker mit dem Widerstand 
raufgesteckt wird, muß auch alles zurück kommen.


Oder hast Du etwa Vista installiert. Ich weiß nicht, ob Vista noch 
DOS-Programme erlaubt.
Unter XP sollte das Programm aber laufen, hab bisher nichts 
gegenteiliges gehört.


Peter

von Bernd (Gast)


Lesenswert?

Hallo,

mein letzter Stand gibt Hoffnung. Ich bin zu meinem Nachbarn, der einen 
PC mit einer echten RS232 hat gegangen und siehe da, es liegt am 
Übergang USB-RS232.

Beim 1-Drahtinterface bekomme ich folgende Fehlermeldung:

Q:\Autotechnik\Atmel Programming\Bootloader\fboot17>fboot17 /C1 /B4800 
/TEST.HEX

COM 1 at 4800 Baud: Connected (One wire)
Bootloader VFFFFFFFF.FF
Error, wrong device informations

Beim 2-Drahtinterface scheint alles okay zu sein:

Q:\AUTOTE~1\ATMELP~1\BOOTLO~1\fboot17>fboot17 /C1 /B4800 /TEST.HEX
COM 1 at 4800 Baud: Connected
Bootloader V1.7
Target: 1E9206 ATtiny45
Buffer: 64 Byte
Size available: 3582 Byte
CRC: o.k.
Elapsed time: 0.27 seconds

Muß jetzt mal schauen, ob es eine anderes RS232 Interface gibt. Benutze 
eines von KEYSPAN, die eigentlich sehr gut sind. Mich wundert nur, dass 
alle anderen Geräte über RS232 gehen.

Bernd

PS Noch eine Idee warum das 1-Dahtinterface nicht geht ?

von Peter D. (peda)


Lesenswert?

Zum Programmieren muß es /pTEST.HEX heißen (und /vTEST.HEX für Verify).

Warum 1-wire nicht geht, weiß ich jetzt auch nicht, 4800 Baud sollte 
langsam genug sein, mal das Oszi an den Pin hängen.
Mit 8MHz sollte 57600Baud eigentlich immer gehen.


Peter

von Bernd (Gast)


Lesenswert?

Also Aufruf erfolgte mit:

fboot17 /C1 /B4800 /pTEST.HEX

Programmierung läuft durch:

COM 1 at 4800 Baud: Connected
Bootloader V1.7
Target: 1E9206 ATtiny45
Buffer: 64 Byte
Size available: 3582 Byte
Program TEST.HEX: 00000 - 006AB successful
CRC: o.k.
Elapsed time: 4.73 seconds

Jetzt den Verify hinterher

fboot17 /C1 /B4800 /vTEST.HEX
COM 1 at 4800 Baud: \

und: ER FINDET DEN BOOTLOADER NICHT MEHR ! Wahrscheinlich kommt jetzt 
der Trick mit dem Reset. Da ich alle 4 Ports benutzen möchte (das war ja 
eigentlich der Sinn der Sache) weiß ich nicht wie ich das machen soll. 
An den 4 Ports soll einmal ein Hex-Schalter sitzen, die Kombination 1111 
könnte für einen Reset benutzt werden.

Stelle mir jetzt folgende Schleife vor:

IF ABFRAGE_PORTS=&B1111 GOTO _RESET

Dann hängt sich die MCU doch dauerhaft auf, oder ?

Bernd

von Peter D. (peda)


Lesenswert?

Bernd wrote:

> und: ER FINDET DEN BOOTLOADER NICHT MEHR !

Erst das PC-Programm starten, dann den AVR einschalten.


Peter

von Bernd (Gast)


Lesenswert?

Warum sollte es bei mir so einfach klappen. Ich hole meine Spannung über 
den USB-Stecker. Also Stecker raus:

fboot17 /C1 /B4800 /vTEST.HEX

STECKER REIN UND .......

COM 1 at 4800 Baud: Connected
Bootloader VFFFFFFFF.FF
Error, wrong device informations

Das ganz noch einmal:

fboot17 /C1 /B4800 /vTEST.HEX

STECKER REIN UND .......

COM 1 at 4800 Baud: Connected
Bootloader VFFFFFFFF.FF
Error, wrong device informations

OKAY JETZT STECKER RAUS UND NEU BRENNEN

Fboot17 /C1 /B4800 /pTEST.HEX
COM 1 at 4800 Baud: Connected
Bootloader VFFFFFFFF.FF
Error, wrong device informations

Prima, muß ich einen Schalter einbauen, oder liegt es an etwas anderem ?

Bernd

von Peter D. (peda)


Lesenswert?

Bernd wrote:
> Ich hole meine Spannung über
> den USB-Stecker.

Man sollte nicht alle möglichen Fehlerquellen gleichzeitig aktivieren.

Vielleicht ist USB zu schwach und die Spannung steigt zu langsam oder 
bricht kurz ein.

Versuch mal ein Netzteil.

Und schalte Brownout ein (auf 4,5V) und die längste Resetzeit.


Peter

von Bernd (Gast)


Lesenswert?

Hi,

also Netzteil angeklemmt und Schalter in der +5 V Leitung vom Attiny45 
eingebaut. Mit Netzteil hatte der PC Schwierigkeiten wegen 
"Potentialunterschiede o.ä." es kam auch keine Verbindung zustande. Dann 
USB-Spannungsversorgung mit Schalter und

fboot17 /C1 /B4800 /pTEST.HEX
COM 1 at 4800 Baud: Connected (One wire)
Bootloader VFFFFFFFF.FF
Error, wrong device informations

fboot17 /C1 /B4800 /pTEST.HEX
COM 1 at 4800 Baud: Connected (One wire)
Bootloader VFFFFFFFF.FF
Error, wrong device informations

fboot17>fboot17 /C1 /B9600 /pTEST.HEX
COM 1 at 9600 Baud: Connected (One wire)
Bootloader VFFFFFFFF.FF
Error, wrong device informations

fboot17>fboot17 /C1 /B9600 /pTEST.HEX
COM 1 at 9600 Baud: Connected (One wire)
Bootloader VFFFFFFFF.FF
Error, wrong device informations

fboot17 /C1 /B1200 /pTEST.HEX
COM 1 at 1200 Baud: Connected
Bootloader VFFFFFFFF.FF
Error, wrong device informations

Mit allen Baudraten wir connected (komischerweise ab und zu im One Wire 
Modus und ansonsten funktioniert es nicht.

Bernd

von Bernd (Gast)


Lesenswert?

Also,

ich werde die Woche folgender Idee nachgehen. Ich werde den Schalter auf 
&B1111 abfragen und dann über den Watchdog Timer den Reset starten.

Also (Programmidee) z.B.

Config Watchdog = 2048 'reset after 2048 mSec
....
IF SCHALTER=B&1111 THEN ENDLOS
....


ENDLOS:
Start Watchdog 'start the watchdog timer
For I = 1 To 10
  I=1
Next

End

Die Lösung müßte doch dann dazu führen, dass der Bootloader startet und 
neue Software geladen werden kann, oder ?

Bernd

von Peter D. (peda)


Lesenswert?

Bernd wrote:

> Mit Netzteil hatte der PC Schwierigkeiten wegen
> "Potentialunterschiede o.ä."

Was hast Du denn fürn komisches Netzteil?
So ein hoher Fehlerstrom kann lebensgefährlich sein, schmeiß es weg!

Nimm ne 2-polige Wandwarze mit 7805 dahinter. Dann hast Du ne 
galvanische Trennung.

Ich weiß ja nicht, was Du da für merkwürdige Schaltungen mit USB 
aufbaust.

Nimm nen normalen 10€ USB-RS232 Konverter, die funktionieren wenigstens.
Bei nem Prolific muß der Treiber nicht älter als vom 25.07.2005 sein.


Peter

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.